• 【LeetCode & 剑指offer刷题】发散思维题6:231. Power of Two(系列)


    【LeetCode & 剑指offer 刷题笔记】目录(持续更新中...)

    231. Power of Two

    Given an integer, write a function to determine if it is a power of two.
    Example 1:
    Input: 1
    Output: true
    Example 2:
    Input: 16
    Output: true
    Example 3:
    Input: 218
    Output: false
     
    //判断一个整数是否为2的幂(说明必为正数)
    class Solution
    {
    public:
        bool isPowerOfTwo(int n)
        {
            if(n<=0) return false; //特殊情况判断
          //  cout << ((n-1)&n) << endl;
            if( ((n-1)&n) == 0 )
            {
                return true;//若为2的幂,则二进制表示中只有一个1,减一做与运算之后就会变为0
            }
            else return false;
            //直接换成 return ((n-1)&n) == 0;可以使代码更紧凑
        }
    };
     
    326. Power of Three
    Given an integer, write a function to determine if it is a power of three.
    Example 1:
    Input: 27
    Output: true
    Example 2:
    Input: 0
    Output: false
    Example 3:
    Input: 9
    Output: true
    Example 4:
    Input: 45
    Output: false
    Follow up:
    Could you do it without using any loop / recursion?
    //循环法
    /*
    class Solution
    {
    public:
        bool isPowerOfThree(int n)
        {
            if(n<1) return false;
            while(n%3 == 0) n /= 3; //多次除以3
           
            return n == 1; //如果最后商为1,则说明为3的幂
        }
    };*/
    /*取对数法
    n=3^i i=log3(n)
    i=logb(n)/logb(3) 看i是否为整数(除以1看是否余数为0)
    ,这里选择10为底(没有问题,不过不明白为什么不存在舍入误差),若选择自然对数,则需考虑舍入误差
    */
    #include <cmath>
    class Solution
    {
    public:
        bool isPowerOfThree(int n)
        {
            return fmod(log10(n)/log10(3), 1) == 0; //fmod为计算除法运算 x/y 的浮点余数
        }
    };
     
    java:return (Math.log(n) / Math.log(3) + epsilon) % 1 <= 2 * epsilon;
     
    342. Power of Four
    Given an integer (signed 32 bits), write a function to check whether it is a power of 4.
    Example:
    Given num = 16, return true. Given num = 5, return false.
    Follow up: Could you solve it without loops/recursion?
    Credits:
    Special thanks to @yukuairoy for adding this problem and creating all test cases.
    /*
    先判断是否为2的幂,再判断是否满足(num-1)为3的倍数(必要条件,不过不知道两个组合起来可不可以称为充分条件)
    We know from Binomial Theroem that (1+X)^n = C(n,0) + C(n,1)*X + C(n,2)*X^2 + C(n,3)*X^3 +.........+ C(n,n)*X^n
    Put X=3, we get 4^n = 1 + C(n,1)*3 + C(n,2)*3^2 + C(n,3)*3^3 +.........+ C(n,n)*3^n
    by moving 1 left side, we get 4^n - 1 = C(n,1)*3 + C(n,2)*3^2 + C(n,3)*3^3 +.........+ C(n,n)*3^n
    i.e (4^n - 1) = 3 * [ C(n,1) + C(n,2)*3 + C(n,3)*3^2 +.........+ C(n,n)*3^(n-1) ]
    This implies that (4^n - 1) is multiple of 3.
    */
    class Solution
    {
    public:
        bool isPowerOfFour(int num)
        {
            if(num<=0) return false;
            return ((num-1)&num) == 0 && (num-1)%3 == 0;
        }
    };
     
     
     
     
  • 相关阅读:
    zabbix linux 客户端编译安装
    yum安装grafana
    zabbix 安装和配置
    安装PHP
    wrk压力测试
    新加坡地图
    shell中去除变量去除所有空格或者去除变量首尾空格的常用几种方法
    新鲜出炉!春招-面试-阿里钉钉、头条广告,美团面经分享,看我如何拿下offer!
    面试阿里,字节跳动90%会被问到的Java异常面试题集,史上最全系列!
    最新出炉,字节跳动一二三面面经,看我如何一步一步攻克面试官?
  • 原文地址:https://www.cnblogs.com/wikiwen/p/10229513.html
Copyright © 2020-2023  润新知