633.平方数之和

题目:

给定一个非负整数 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
原文地址:https://www.cnblogs.com/hequnwang/p/13617090.html