纯纯的思维题
给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true
;否则,返回 false
。
整数 n
是 3 的幂次方需满足:存在整数 x
使得 n == 3^x
示例 1:
输入:n = 27 输出:true
示例 2:
输入:n = 0 输出:false
提示:
-2^31 <= n <= 2^31 - 1
进阶:
- 你能不使用循环或者递归来完成本题吗?
思路:
①:可以直接除 3 查看最后余数是不是 0 即可 ,简单,时间复杂度为 O(log3n);
②:3^19次方 为 int 型 3的幂 的最大值,所以说,只要一个数是 3 的幂次方,它必能被 3 ^ 19整除;
注意:这并不是快速判断 x 的幂的通用做法,当且仅当 x 为质数可用。
class Solution { public: bool isPowerOfThree(int n) { int max_num = (int)pow(3, 19); return n > 0 && max_num % n == 0; } };