326. Power of Three [easy] (Python)

题目链接

https://leetcode.com/problems/power-of-three/

题目原文

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的倍数。
进一步:能否不用循环或递归实现?

思路方法

思路一

先不考虑进一步的要求,用循环的做法是:每次尝试将输入的数除以3,观察是否能整除,若不能则说明不是3的倍数;若能,则用除以3的结果循环上述过程,直至得到1,说明输入是3的幂次。

代码

class Solution(object):
    def isPowerOfThree(self, n):
        """ :type n: int :rtype: bool """
        if n <= 0:
            return False
        while n%3 == 0:
            n /= 3
        return n == 1

思路二

先不考虑进一步的要求,用递归的做法也尝试一下。

代码

class Solution(object):
    def isPowerOfThree(self, n):
        """ :type n: int :rtype: bool """
        if n <= 0:
            return False
        if n == 1:
            return True
        if n%3 == 0:
            return self.isPowerOfThree(n/3)
        else:
            return False

思路三

当然,题目说了不能循环或递归,上面的解法能AC但不太符合题意。考虑到输入是“Integer”,是有范围的(<2147483648),所以存在能输入的最大的3的幂次,即 3^19=1162261467。所以只要检查输入能否被它整除即可

代码

class Solution(object):
    def isPowerOfThree(self, n):
        """ :type n: int :rtype: bool """
        return n > 0 and 1162261467 % n == 0

思路四

还可以算出能输入的所有3的幂次,保存到list或dict中,对每次输入判断是否在这些数中即可。

代码

class Solution(object):
    def isPowerOfThree(self, n):
        """ :type n: int :rtype: bool """
        nums = [1, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049, 177147, 531441, 1594323, 4782969, 14348907, 43046721, 129140163, 387420489, 1162261467]
        return n in nums

PS: 新手刷LeetCode,新手写博客,写错了或者写的不清楚还请帮忙指出,谢谢!
转载请注明:http://blog.csdn.net/coder_orz/article/details/51505792

    原文作者:coder_orz
    原文地址: https://blog.csdn.net/coder_orz/article/details/51505792
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞