沒想出來不用循環的。記錄下。
如果是2的次方,必有num & (nums - 1)
bool isPowerOfFour(int num) {if (num < 1) return false;if (num & (num - 1)) return false; // 排除不是2的倍數if (num & 0x55555555) return true; // 排除不是4的倍數,此時num是2的次方return false;}
或者第二步排除,直接(num - 1) % 3為0也可以,如果是4的倍數,減1后必能被3整除,從二進制角度考慮下即可。
不建議用對數,涉及浮點數,精度問題,見:https://discuss.leetcode.com/topic/33536/a-summary-of-all-solutions-new-method-included-at-15-30pm-jan-8th