【一天一道LeetCode】#326. Power of Three

时间:2021-03-13 22:32:01

一天一道LeetCode

本系列文章已全部上传至我的github,地址:ZeeCoder‘s Github

欢迎大家关注我的新浪微博,我的新浪微博

欢迎转载,转载请注明出处

(一)题目

Given an integer, write a function to determine if it is a power of three.

Follow up:

Could you do it without using any loop / recursion?

(二)解题

题目大意:判断一个是不是3的n次方。

解题思路:很容易就想到将该数每次都除以3,如果整除则继续除,直到等于1就表示是3的n次方,否则就不是。

class Solution {
public:
    bool isPowerOfThree(int n) {
        int num=n;
        while(num>0 && num%3==0)  //整除
            num/=3;
        return num==1;
    }
};

但是题目中提到,能不能不用循环或者递归来解题。可是想了半天都没有想到,无奈只能求助百度了。

在int范围内的3的n次方最大为3的19次方1162261467,如果num时3的n次方数的话,一定能被1162261467整除。

于是有下面的代码:

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

还有的方法就是列举法,也就19个数,判断跟这19个数中任意一个相不相等即可。