深圳建科技有限公司网站首页,应用商城下载,巫溪集团网站建设,流程图在线制作网站题记#xff1a;
给定一个整数#xff0c;写一个函数来判断它是否是 3 的幂次方。如果是#xff0c;返回 true #xff1b;否则#xff0c;返回 false 。
整数 n 是 3 的幂次方需满足#xff1a;存在整数 x 使得 n 3^x
示例 1#xff1a; 输入#xff1a;n 27 输出…题记
给定一个整数写一个函数来判断它是否是 3 的幂次方。如果是返回 true 否则返回 false 。
整数 n 是 3 的幂次方需满足存在整数 x 使得 n 3^x
示例 1 输入n 27 输出true 示例 2 输入n 0 输出false 示例 3 输入n 9 输出true 示例 4 输入n 45 输出false 提示
-2 ^ 31 n 2 ^ 31 - 1
进阶你能不使用循环或者递归来完成本题吗
题目来源 作者LeetCode 链接https://leetcode.cn/leetbook/read/top-interview-questions-easy/xnsdi2/ 来源力扣LeetCode
解题方法
自己敲的
一循环一直乘以3判断是否有等于该整数的数存在
function isPowerOfThree($n) {//循环if($n 3 || $n 1)return true;$start 3;while($start $start $n){$start $start * 3;if($start $n){return true;}}return false;
}二递归一直除以3
function isPowerOfThree($n) {//递归if($n 1)return true;if($n 0 $n % 3 0 $this-isPowerOfThree($n / 3))return true;return false;
}官方方法其实也就是一直乘以3
function isPowerOfThree($n) {$flag true;$num 0;while($flag){$x pow(3,$num); //3的num次方$num;if($x $n){$flag false;return false;} if($x $n){$flag false;return true;} }
}其他方法
一一直除以3
一种最简单的方式就是判断n是否能够被3整除如果能够被3整除就除以3直到不能被3整除为止最后判断n是否等于1代码比较简单来看下
public boolean isPowerOfThree(int n) {if (n 1)while (n % 3 0)n / 3;return n 1;
}转换为PHP代码为
function isPowerOfThree($n) {//一直除以3if($n 1){while($n % 3 0){$n / 3;}}return $n 1;
}二递归方式解决同上面的递归方法只是简化了写法
还可以改为递归的方式一行代码解决
public boolean isPowerOfThree(int n) {return n 0 (n 1 || (n % 3 0 isPowerOfThree(n / 3)));
}转换为PHP代码为
function isPowerOfThree($n) {return $n 0 ($n 1 || ($n % 3 0 $this-isPowerOfThree($n / 3)));
}三算术表达式计算
先来普及一波数学知识 对数的乘法法则 log(ab) log(a) log(b) 对数的乘法法则表明两个数相乘的对数等于这两个数分别对数后的和。例如log(10100) log(10) log(100) 1 2 3。 对数的除法法则 log(a/b) log(a) - log(b) 对数的除法法则表明两个数相除的对数等于这两个数分别对数后的差。例如log(100/10) log(100) - log(10) 2 - 1 1。 对数的幂法法则 log(a^b) blog(a) 对数的幂法法则表明一个数的幂的对数等于这个数的对数乘以幂的指数。例如log(10^3) 3log(10) 3*1 3。 对数的换底公式 loga(b) logc(b)/logc(a) 对数的换底公式表明任意两个底不同的对数可以用一个公共底的对数来表示。例如log2(8) log10(8)/log10(2) 0.903/0.301 3。 public boolean isPowerOfThree(int n) {return (Math.log10(n) / Math.log10(3)) % 1 0; //对照对数的换底公式//log3(n)
}四找到最大幂
题中n的范围是 -2^31 n 2^31 - 1 而在这个范围内3的最大幂是1162261467在比他大就超过int表示的范围了我们直接用它对n求余即可过求余的结果是0说明n是3的幂次方
public boolean isPowerOfThree(int n) {return (n 0 1162261467 % n 0);
}转换为PHP代码为
function isPowerOfThree($n) {return ($n 0 1162261467 % $n 0);
}方法来源 作者数据结构和算法 链接https://leetcode.cn/leetbook/read/top-interview-questions-easy/xnsdi2/?discussionxhUFcs 来源力扣LeetCode