LeetCode#459 Repeated Substring Pattern

问题描述

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?

Credits:

Special thanks to @dietpepsi for adding this problem and creating all test cases.

Subscribe to see which companies asked this question

补充说明:

这个题目的要求通过实现一个函数,当输入一个数字的时候,如果这个数字是3的幂(次方),则返回True。

另外这里有个小小的要求,就是在实现功能的前提下,要求尽量不要用循环或者递归实现。

方案分析

  1. 首先说使用循环的方式,因为是3的幂,肯定满足的一个条件就是循环除以3,肯定有一次能被整除。so easy。上代码。

python实现

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

方案分析2

  1. 既然会求幂,反过来就是求log了,那么使用log函数去解决这个问题,但是这里有个问题,看注释部分。

python实现2

class Solution(object):
    def isPowerOfThree(self, n):
        """
        :type n: int
        :rtype: bool
        """
        import math
        epsilon = 0.000000000000001
        if n <= 0:
            return False
        # return ((math.log(n, 3) + epsilon) % 1 ) <=  2 * epsilon
        # 这块无效,java可以用,但是python无效,应该是各自的机制不同,取决于对浮点数除法的精度是多少,可以自行试试。或者有好的想法可以留言。
        return 3 ** round((math.log(n, 3))) == n

你可能感兴趣的:(LeetCode#459 Repeated Substring Pattern)