/* * @lc app=leetcode.cn id=326 lang=c * * [326] 3的幂 * * https://leetcode-cn.com/problems/power-of-three/description/ * * algorithms * Easy (42.85%) * Total Accepted: 14.2K * Total Submissions: 33.1K * Testcase Example: '27' * * 给定一个整数,写一个函数来判断它是否是 3 的幂次方。 * * 示例 1: * * 输入: 27 * 输出: true * * * 示例 2: * * 输入: 0 * 输出: false * * 示例 3: * * 输入: 9 * 输出: true * * 示例 4: * * 输入: 45 * 输出: false * * 进阶: * 你能不使用循环或者递归来完成本题吗? * */ bool isPowerOfThree(int n) { if(n<=0){ return false; } while(n>1){ if(n%3!=0) return false; n /=3; } return true; }
和2的幂思路一样的算法。
但是题目有个进阶要求 不使用循环或者递归
这里计算最大的3的幂次方的数 然后判断n能否被这个数整除即可。
/* * @lc app=leetcode.cn id=326 lang=c * * [326] 3的幂 * * https://leetcode-cn.com/problems/power-of-three/description/ * * algorithms * Easy (42.85%) * Total Accepted: 14.2K * Total Submissions: 33.1K * Testcase Example: '27' * * 给定一个整数,写一个函数来判断它是否是 3 的幂次方。 * * 示例 1: * * 输入: 27 * 输出: true * * * 示例 2: * * 输入: 0 * 输出: false * * 示例 3: * * 输入: 9 * 输出: true * * 示例 4: * * 输入: 45 * 输出: false * * 进阶: * 你能不使用循环或者递归来完成本题吗? * */ bool isPowerOfThree(int n) { if(n<=0) { return false; } int max3Power=(int)pow(3,(int)(log(0x7fffffff)/log(3))); if (max3Power%n==0) { return true; } else { return false; } }
--------------------------------------------------------------------------
python:
# # @lc app=leetcode.cn id=326 lang=python3 # # [326] 3的幂 # # https://leetcode-cn.com/problems/power-of-three/description/ # # algorithms # Easy (42.85%) # Total Accepted: 14.2K # Total Submissions: 33.1K # Testcase Example: '27' # # 给定一个整数,写一个函数来判断它是否是 3 的幂次方。 # # 示例 1: # # 输入: 27 # 输出: true # # # 示例 2: # # 输入: 0 # 输出: false # # 示例 3: # # 输入: 9 # 输出: true # # 示例 4: # # 输入: 45 # 输出: false # # 进阶: # 你能不使用循环或者递归来完成本题吗? # # class Solution: def isPowerOfThree(self, n: int) -> bool: return n > 0 and 3**19 % n == 0