• 263.3的幂


    给定一个整数,写一个函数来判断它是否是3的幂次方。如果是,返回true;否则,返回false。整数n是3的幂次方需满足:存在整数x使得n==3^x。

    示例一:

    输入:n==27

    输出:true

    示例二:

    输入:n==0

    输出:false

    示例三:

    输入:n==9

    输出:true


    解法一:试除法

    我们不断的将n除以3,直到n等于1。如果此过程中n无法被3整除,就说明n不是3的幂。本题中的n可以为负数或零,可以直接提前判断该情况并返回false,也可以进行试除,因为负数或零无法通过多次除3得到1。

    bool isPowerOfThree(int n){

        while (n&&n%3==0)

        {

            n/=3;

        }

        if (n==1)

        {

            return true;

        }

        else

            return false;

    }

    时间复杂度:O(logn)

    空间复杂度:O(1)


    解法二:公约法

    据题可知,n在有符号32位整数范围内【-2^31,2^31-1】,最大3幂为3^19=1162261467,我们只需要判断n是否是1162261467的约数即可。这里需要判断n是负数或0时直接返回false。

    bool isPowerOfThree(int n){

        if ((n>0)&&(1162261467%n==0))

        {

            return true;

        }

        return false;

    }

    时间复杂度:O(1)

    空间复杂度:O(1)


    解法三:递归

    n为3的幂需要满足两个条件:1.n是正整数;2.n是3的倍数。

    任何一个数的0次方都是1,所以在n==1的情况下也是3的幂,而在n为3的倍数时,就可以进行自己调用自己的操作了。

    bool isPowerOfThree(int n){

        if (n<0)

        {

            return false;

        }

        else if (n==1)

        {

            return true;

        }

        else if (n%3==0)

        {

            return isPowerOfThree(n/3);

        }

        else 

            return false;

    }

    时间复杂度:O(logn)

    空间复杂度:O(1)

  • 相关阅读:
    跳跃游戏(贪心思想)
    Linux TCP 通信并发
    【Pytorch】torch.Tensor.view()
    自学黑客(网络安全)
    2023.11.20使用flask做一个简单图片浏览器
    【C语言】求解数独 求数独的解的个数 多解数独算法
    Cloudflare分析第二天:解密返回数据
    python向microPython的repl发送串口命令驱动ws2812(附避坑指南)
    【C#】试卷批改系统
    java多线程进阶(十)线程池
  • 原文地址:https://blog.csdn.net/qq_70799748/article/details/125887204