633. 平方数之和
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。
示例 1:
输入:c = 5
输出:true
解释:1 * 1 + 2 * 2 = 5
示例 2:
输入:c = 3
输出:false
代码:
public class sum_squares {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int target = 2147483600;
System.out.println(judgeSquareSum(target));
}
public static boolean judgeSquareSum(int c) {
if(c < 0)
return false;
long a = 0;//防止int型溢出,需要使用long型避免溢出
int b = (int)Math.sqrt(c);
while(a <= b) {
long powsum = a*a + b*b;//防止int型溢出,需要使用long型避免溢出
if(powsum == c) {
return true;
}
else if(powsum > c){
b--;
}else
a++;
}
return false;
}
}
复杂度分析
时间复杂度:O(sqrt(c))。最坏情况下 a和 b 一共枚举了0 到sqrt(c)里的所有整数。
空间复杂度:O(1)。
提示:
0 <= c <= 2^31 - 1
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/sum-of-square-numbers
仅供学习参考。