c, your task is to decide whether there're two integers a and b such that a2 + b2

Example 1:

Input: 5
Output: True
Explanation: 1 * 1 + 2 * 2 = 5

Example 2:

Input: 3
Output: False



方法一:两遍for循环, 复杂度o(n2), 会time limit 报错

public boolean judgeSquareSum(int c) {
        for(int i=0;i<=c;i++) {
            for(int j=0;j<=c;j++) {
                if(i*i+j*j==c) {
                    return true;
                }
            }
        }
        return false;
    }


方法二:

从0 和sqrt(n)两端分别查找

public boolean judgeSquareSum2(int c) {
        int low = 0;
        int high = (int)Math.sqrt(c);
        while(low<=high) {
            int sum = low*low+high*high;
            if(sum<c) {
                low++;
            } else if(sum>c) {
                high--;
            } else {
                return true;
            }
        }
        return false;
    }