LeetCode No.326 [Power of Three]

Description

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

Leet Code Link


转换成三进制的实现方式

将数值转换成三进制后:

  1. 判断三进制的最高位为1且低位全是0
  2. 判断(n-1)与n的三进制总位数差1, 但是这要考虑n=1的情况

这是第二种方法(确实是相当的方法)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func isPowerOfThree(n int) bool {
if n <= 0 {
return false
}
if n == 1 {
return true
}
x := strconv.FormatInt(int64(n), 3)
y := strconv.FormatInt(int64(n-1), 3)
return len(x) == len(y)+1
}

数学特性实现方式

单纯使用除3取余的方法,并进行遍历,判断是否有余数不为0的情况

1
2
3
4
5
6
7
8
9
10
11
12
func isPowerOfThree(n int) bool {
if n<1 {
return false
}
for n > 1 {
if n%3 != 0 {
return false
}
n /= 3
}
return true
}