LeetCode--初级算法之3的幂(Power of Three 3)
今天,为了和大佬们看齐,懒惰的我开启了多天未练习的LeetCode,决定提升下我的算法能力,然后随机向下拉,看到了3的幂,眼顺就开始做它了,抱着侥幸的心理,想着:只要做完不报错就行了,时间复杂度那些先不用考虑,然后就开始练了。
题目如下:
给定一个整数,写一个函数来判断它是否是 3 的幂次方。
示例 1:
输入: 27
输出: true
示例 2:
输入: 0
输出: false
示例 3:
输入: 9
输出: true
示例 4:
输入: 45
输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
接下来看下代码部分:
class Solution {
public boolean isPowerOfThree(int n) {
int num = 1;
//n为1时直接返回true 因为3的0次幂就是1
if(n==1){
return true;
}
//如果次数不能被3整除,说明它肯定不是三的幂数 比如说29/3=9可以被整除,余数为0;
//而7/3 余数为1,说明这些数必定不能与3成为幂关系,直接返回false,而能被整除的有可能与3有幂关系
if(n%3 != 0){
return false;
}
//循环 一直让num*3(一直为3的幂),如果在某一刻n==num了,说明n肯定为3的幂
//反正如果 num大于n后 ,说明n肯定不是3的幂
while(true){
num *= 3;
if(num==n){
return true;
}
else if(num > n){
return false;
}
}
}
}
看完发觉也不是很难,就稀里糊涂的敲键盘,敲完后,想起之前每次都信誓旦旦以为不会报错,就想,这第一次提交肯定也会报错,然后一点提交,过了一会,提交通过!整个人惊了一下。然后又想起我的执行用时肯定非常慢,谁知,一看 超过99%的java提交记录,整个人都激动得站起来,然后就想,这个必须要写篇博客记录一下^^
这是最后得执行时间图:
我试着提交相同的代码几次,发现还是有点不稳定,就是超过的提交记录在%70几和%90几这来回变化,不过对我来说已经很快了,之前都是非常后边的T^T。
总之,这是我的第一篇博客,也是我为之努力的标志,我相信勤能补拙,希望大家能与我一起奋斗吧!谢谢大家的观看嘿嘿。