leetcode 326. 3的幂

问题描述

给定一个整数,写一个函数来判断它是否是 3 的幂次方。

示例 1:

输入: 27
输出: true
示例 2:

输入: 0
输出: false
示例 3:

输入: 9
输出: true
示例 4:

输入: 45
输出: false
进阶:
你能不使用循环或者递归来完成本题吗?

代码(循环)

class Solution {
public:
    bool isPowerOfThree(int n) {
        if(n == 1)return true;
        int i = n;
        while(i > 3)
        {
            if(i % 3 != 0)return false;
            i /= 3;
        }
        return (i == 3)?true:false;
    }
};

结果:

执行用时 :36 ms, 在所有 C++ 提交中击败了19.01%的用户
内存消耗 :5.8 MB, 在所有 C++ 提交中击败了100.00%的用户

代码

由于输入是int,正数范围是0-231,在此范围中允许的最大的3的次方数为\(3^{19}=1162261467\),那么我们只要看这个数能否被n整除即可:

class Solution {
public:
    bool isPowerOfThree(int n) {
        return ( n > 0 && 1162261467 % n == 0)?true:false;
    }
};

结果:

执行用时 :16 ms, 在所有 C++ 提交中击败了89.06%的用户
内存消耗 :5.8 MB, 在所有 C++ 提交中击败了100.00%的用户
posted @ 2020-03-31 08:07  曲径通霄  阅读(126)  评论(0编辑  收藏  举报