633. 平方數之和 ( 列舉 + 二分查詢 )

lankerens發表於2020-12-26

LeetCode: 633. 平方數之和

在這裡插入圖片描述


二分查詢

通過迴圈 i 列舉 i * i 自身, 作為構成 c 的其中一個平方數,然後通過二分查詢找出剩下的另一個平方數。

如果找到另一個平方數,直接返回 true, 反之,繼續往後迭代。



二分查詢 AC Code

class Solution {
    public boolean judgeSquareSum(int c) {
        // 通過迴圈 i * i 自身 列舉其中一個平方數
        // 剩下一個平方數通過二分查詢來確定有無
        for(long i = 0; i * i <= c; i++){
            int b = c - (int)(i * i);
            if(bs(0, b, b)) {
                // 找到了
                return true;
            }
        }
        return false;
    }

    public boolean bs(long l, long r, int a){
        long left = l, right = r;

        while(left <= right) {
            long mid = left + (right - left) / 2;

            if(mid * mid < a) left = mid + 1;
            else if(mid * mid > a) right = mid - 1;
            else return true;
        }
        
        return false;
    }
}



相關文章