633. 平方数之和
难度中等
给定一个非负整数 c
,你要判断是否存在两个整数 a
和 b
,使得 a2 + b2 = c
。
示例 1:
输入:c = 5 输出:true 解释:1 * 1 + 2 * 2 = 5
示例 2:
输入:c = 3 输出:false
示例 3:
输入:c = 4 输出:true
示例 4:
输入:c = 2 输出:true
示例 5:
输入:c = 1 输出:true
提示:
0 <= c <= 2^31 - 1
法一:
class Solution { public: bool judgeSquareSum(int c) { if(c == 0) return true; int n = sqrt(c), a; for(a = 1; a<=sqrt(c); ++a){ double b = sqrt(c-a*a); if(b == (int)b) return true; } return false; } };
时间:O(根号n)
空间:O(1)
法二: 双指针
class Solution { public: bool judgeSquareSum(int c) { //if(c == 0) return true; long b = sqrt(c), a = 0; while(a<=b){ long curr = a*a+b*b;//int溢出 if(curr == c) return true; else if(curr < c){ a++; } else b--; } return false; } };
时间:O(根号n)
空间: O(1)