• 231. 2的幂


    方法一、对于循环除以2,直到结果为奇数,判断结果是否为1

    时间O(logn),(这里题目已经给出了n得范围必然是int,那么logn其实必然小于31)

    1 class Solution {
    2     public boolean isPowerOfTwo(int n) {
    3         if(n==0) return false;
    4         while(n%2==0){
    5             n/=2;
    6         }
    7         return n==1;
    8     }
    9 }

    变形,上面我们从n递推至1,下面得变形我们从1通过位运算递推至2^31判断

     1 class Solution {
     2     public boolean isPowerOfTwo(int n) {
     3        int temp=1;
     4        for(int i=0;i<31;i++){
     5            if(temp==n){
     6                return true;
     7            }
     8            temp=temp<<1;
     9        }
    10        return false;
    11     }
    12 }

    方法二、利用一次位运算

    之前我们做过 191. 位1的个数 这道题,当时得出结果,n&(n-1),

    可以将n最右侧得1置为0,如此循环我们就可以计算出n中有多少个1,

    这里需要判断n是否为2得幂,基于其特性n必然只存在1位为1,

    那么必然有n&(n-1)=0,于是有

    1 class Solution {
    2     public boolean isPowerOfTwo(int n) {
    3        return n>0 && (n&(n-1))==0;
    4     }
    5 }
    争取早日不再是一只菜鸡
  • 相关阅读:
    第十章学习笔记
    MyOD(选作,计入平时成绩)
    学习笔记第九章
    第一、二章学习笔记
    团队作业(一):团队展示
    C语言实现Linux下od -tx -tc XXX的功能
    第七、八章学习笔记
    Sort 在 Linux
    Linux C语言编程基础
    MyOD
  • 原文地址:https://www.cnblogs.com/jchen104/p/14788974.html
Copyright © 2020-2023  润新知