Problem:
判断一个整数是不是2的整数次方
解法1:
将该整数循环除于2,判断是否最后是1
时间复杂度:O(n)
实现代码:
public static boolean isTwice(long num) { if(num==0){ return false; }else { while(num%2==0) { num = num/2; } if(num==1) { return true; } } return false; }
解法2:
如果这里你想到了二进制那么这里只需要一条语句就能解决,一个整数N如果是二的整数次方,那么它的二进制中应该只有一个1,那么我们可以使用之前学过的(N-1)&N来做,如果((N-1)&N)==0,那么该整数就是二的整数次方
时间复杂度:O(1)
实现代码:
public static boolean isTwice2(long num) { if(((num-1)&num)==0) { return true; } return false; }