题目:
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c。
示例1:
输入: 5
输出: True
解释: 1 * 1 + 2 * 2 = 5
示例2:
输入: 3
输出: False
分析:此题使用双指标遍历的方法实现。由于题目给的是非负整数。所以先要判断此数。这里我们需要设定一个遍历值得大小,取这个整数的算术平方根。还需要将算术平方根取整。同样取两个变量。i初值为0,j初值为非负整数的算术平方根。判定i的平方与j的平方和是否为非负整数,是则返回true。不是怎判断是大于还是小于。如果c>i*i+j*j。说明j的取值大了,则将j--;同样的道理将i++;
代码:
java代码
1 class Solution { 2 public boolean judgeSquareSum(int c) { 3 int i=0,j = (int) Math.sqrt(c); 4 if(c<0) 5 { 6 return false; 7 } 8 9 while(j>=i) 10 { 11 if(c == i*i+j*j) 12 { 13 return true; 14 15 } 16 else if(c>i*i+j*j) 17 { 18 i++; 19 } 20 else 21 { 22 j--; 23 24 } 25 26 27 } 28 return false; 29 30 } 31 }View Code