题目
https://leetcode-cn.com/problems/power-of-two/
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == $2^x$ ,则认为 n 是 2 的幂次方。
程序样例
1 2 3
| bool isPowerOfTwo(int n){
}
|
方法一
一顿胡乱尝试后写出来的,不太美观,但是复杂度分析结果比较好。
关键代码
1 2 3 4 5 6 7 8 9 10
| bool isPowerOfTwo(int n){ if(n==1){ return true; }else if(n%2!=0||n==0){ return false; }else{ isPowerOfTwo(n/2); } return; }
|
完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include <stdio.h>
bool isPowerOfTwo(int n){ if(n==1){ return true; }else if(n%2!=0||n==0){ return false; }else{ isPowerOfTwo(n/2); } return; }
main(){ int n; scanf("%d",&n); bool flag = isPowerOfTwo(n); printf("--%d--",flag); }
|
编译出错 以及 解决方法
编译出错

原因是返回值,leetcode判断可能会有无返回值的情况,所以出错。
解决办法:
在方法的最后一行加return;
,注意不要返回内容,否则可能会出错。
复杂度分析
执行用时: 0 ms
内存消耗: 5.3 MB
方法二
看了别人的解析后想出来的,虽然代码美观了一些,但是复杂度分析结果没那么好。
关键代码
1 2 3 4 5 6 7 8 9
| bool isPowerOfTwo(int n){ if(n==1){ return true; } if(n%2!=0||n==0){ return false; } return isPowerOfTwo(n/2); }
|
完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <stdio.h>
bool isPowerOfTwo(int n){ if(n==1){ return true; } if(n%2!=0||n==0){ return false; } return isPowerOfTwo(n/2); }
main(){ int n; scanf("%d",&n); bool flag = isPowerOfTwo(n); printf("--%d--",flag); }
|
复杂度分析
执行用时: 4 ms
内存消耗: 5.4 MB