从Power_of_Two所得

开始刷leetcode上的题目了,毕竟写程序也是需要开脑洞的,刷题目就能让自己脑洞越来越大的说,这不发现了一个题目: Power of Two
题目要求:
Given an integer, write a function to determine if it is a power of two.
其实就是让你看一个数是不是2的幂次方


先说我的思路吧,一个数一直除以2,除到他小于4的时候,2的幂方数就是只有 2 1 这两个数字了,那么我判断一下是不是他俩就好啦

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var isPowerOfTwo = function (n) {
var wx = n
var falg = 0
while (falg == 0) {
// wx = wx >> 1
wx = wx / 2
if (wx < 4) {
//需要考虑一开始就是1的情况
if (wx == 2 || wx == 1 || wx == 0.5) {
falg = 1
// console.log("true")
return true
} else {
falg = 2
// console.log("false")
return false
}
}
}

};


然后看了看别人的代码,发现了一个很棒的思路,思路就是看 n 与 n-1 与出来的结果是不是 0
我们看一下 4 二进制是:0100 那么3呢,3是 0011,二者与出来就是0,所以这个思路太赞了,一下子就得出结果了。代码是没有的,思路都有了,代码还写不出来吗!


又发现了个看数字是不是4的幂的题
我的想法是 先看他是不是2的幂,再看他是不是小于10,小于的话,等不等于 4 或者 8
然后发现了一个想法是,先看是不是2 的幂,然后看能不能整除4
然后又发现了个是不是3的幂的数,我的思路是利用数学规则(各个位相加为三的倍数)看他是不是能被3整除,能的话就除以3,用结果继续这样子判断,一直到他小于10的时候,看是不是 3 或者 9
结果发现了一个更惊为天人的思路,思路是这样子的,把可以取值范围内的最大3的幂数求出来,记为 a , 然后给个数字b 如果 a % b === 0那b就是3的幂数,没有想到的话看下面

1
2
3
a = 3 * 3 * 3 * 3 * 3 *3 *3   
b = 3 * 3 * 3
c = 3 * 3 * 4

这个就很直观了吧!


感觉不错的话给博主赞助一下呗