633.Sum of Square Numbers 暴力求解,注意设置a为long,否则容易发生int溢出 class Solution { public: bool judgeSquareSum(int c) { for (long a = 0; a * a <= c; a++) { double b = sqrt(c - a * a); if (b == (int)b) { return true; } } return false; } }; 双指针解法 至于为什么sum>c的时候一定是右“指针”减一,sum<c的时候是左“指针”加一,题解第二个解法的矩阵搜索图给了很好的解释。而且结合两数之和这种问题,左指针一直是加上来的,右指针一直是减下去的,两边往中间靠,最后相同的时候还没找到就是无了。 class Solution { public: bool judgeSquareSum(int c) { long left = 0; long right = (int)sqrt(c); while (left <= right) { long sum = left * left + right * right; if (sum == c) { return true; } else if (sum > c) { right--; } else { left++; } } return false; } };