> For the complete documentation index, see [llms.txt](https://kerasnoone.gitbook.io/garnet/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kerasnoone.gitbook.io/garnet/suan-fa/shu-xue/3263-de-mi.md).

# \[326]\[简单] 3的幂

## 题目描述

[326. 3的幂](https://leetcode-cn.com/problems/power-of-three/)

给定一个整数，写一个函数来判断它是否是 3 的幂次方。如果是，返回 true ；否则，返回 false 。

整数 n 是 3 的幂次方需满足：存在整数 x 使得 n == 3x

示例 1：

```
输入：n = 27
输出：true
```

示例 2：

```
输入：n = 0
输出：false
```

示例 3：

```
输入：n = 9
输出：true
```

示例 4：

```
输入：n = 45
输出：false
```

提示：

* -231 <= n <= 231 - 1

进阶：

你能不使用循环或者递归来完成本题吗？

## 解题思路

### 循环

从1开始, 乘以3得到新数字, 再将这个新数字乘以3, 这么循环下去, 得到的数字序列都是3的幂. 那么在判断n是否是3的幂时, 如果n能被3整除, 且整除后得到的数字仍然能被3整除, 那么n一定是3的幂.

所以循环的思路, 就是判断n是否能被3整除:

* 如果可以被整除, 将n更新为`n / 3`, 继续循环
  * 特殊情况是如果n为0, 在判断整除时会通过, 但0不是3的幂. 这种特殊情况会导致`0 / 3 = 0`进入死循环, 需要特殊处理
* 如果不能被整除, 说明n不是3的幂
  * 但如果此时的n已经是1了, 说明发生了`n / n = 1`的情况, 由于循环中一直除以3, 相当于n就是3的幂

```python
class Solution:
    def isPowerOfThree(self, n: int) -> bool:
        if n == 0:
            return False

        while n % 3 == 0:
            n = n / 3

        return n == 1
```
