https://leetcode.com/problems/valid-perfect-square/description/
Solution 1. For 32 bit integer input num, sqrt(num) < pow(2,16). Let n=0, Start from 15th bit, n = n + pow(2,15). If num < n*n, decreasing n to pow(2,14), pow(2,13), ... until num > n*n, say n = pow(2,i). Then start again from i-1 bit.
bool isPerfectSquare(int num) {
vector<int> sq;
int n = 0;
for(int i=15; i>=0; i--){
while(pow(n+(1<<i),2) > num && i>=0) i--;
n += (1<<i);
if(pow(n,2) == num) return true;
}
return false;
}
Solution 2. 1 + 3 + 5 + ... + (2n-1) = n*n
bool isPerfectSquare(int num) {
int i = 1;
while (num > 0) {
num -= i;
i += 2;
}
return num == 0;
}
No comments:
Post a Comment