Power of Two.md - ZeldaM1/leetcode-practice GitHub Wiki

题目:

Power of Two Given an integer, write a function to determine if it is a power of two. 给定一个整数,写一个函数来确定它是否为2的幂。

分析:

  1. 由2的幂的特性可知,在二进制中,2的幂首位均为1,其余位为0.如:2 10;4 100;8 1000;16 10000; 若n为2的幂,则可将n-1的二进制形式与n的二进制形式通过与(&)的操作判断结果是否为0,以便得出结果。
  2. 先排除n为1、n为0及n为负数的情况,可将n进行循环除以2的操作直至得出不能整除2的数,若该数为1,则判断为2的幂,其他则不是。

代码:

bool isPowerOfTwo(int n) { if(((n&(n-1))==0)&&n!=0&&n>0) return true; else return false; } 2. bool isPowerOfTwo(int n) { if(n==0||n<0) return false; if(n==1) return true; while(n%2==0) { n=n/2; } if(n==1) return true; else return false; }

总结:

还有一种采用>>运算的方法,如果n为2的幂,则只需算出是否能通过将n右移使得n为1,且此法更为快捷