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;
	}
};

本文标签: 思路语言攻克编程