admin管理员组文章数量:1516870
633. 平方数之和
思路1:暴力遍历(不详述了)
思路2:双指针
题目给的c的范围很大0 <= c <= 2^31 - 1,小心超界
这个AC不了,直接报错了,没有剪枝,也没有考虑数据越界的问题
class Solution {
public:
bool judgeSquareSum(int c) {
int left = 0, right = c;
while (left <= right)
{
int num = left * left + right * right;
if (num > c)right--;
if (num == c)return true;
if (num < c)left++;
}
return false;
}
};
注意剪枝
其中注意数据类型为long才能过,否则会越界
class Solution {
public:
bool judgeSquareSum(int c) {
if (c < 0)return false;
long left = 0, right = (long)sqrt(c);
while (left <= right)
{
long num = left * left + right * right;
if (num > c)right--;
if (num == c)return true;
if (num < c)left++;
}
return false;
}
};
版权声明:本文标题:从0开始,用C语言攻克LeetCode的633题:寻找数字间的平方和关系 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/web/1772357719a3273937.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论