进制转换
转换
3
3
3 进制,如果每一位非
0
0
0 即
1
1
1 ,
r
e
t
u
r
n
t
r
u
e
return\ true
return true (数字
0
0
0 除外)。
如果任意一位为
2
2
2 ,
r
e
t
u
r
n
f
a
l
s
e
return\ false
return false 。
证明:
对于第
p
p
p 位,
如果
p
=
0
p=0
p=0 ,这一位不需要表示。
如果
p
=
1
p=1
p=1 ,
3
p
3^p
3p 表示这一位的数。
如果
p
=
2
p=2
p=2 ,对于第
p
p
p 位,
2
×
3
p
≠
3
p
2\times 3^p\ne 3^p
2×3p=3p ,低位和高位对第
p
p
p 位无影响 。所以第
p
p
p 位无法表示成
3
3
3 的幂次。
辗转相除求进制转换即可。
提示 : 类比 10 10 10 进制。
class Solution {
public:
bool checkPowersOfThree(int n) {
while(n) {
if(n%3==2) return false;
n/=3;
}
return 0==n;
}
};
- 时间复杂度 : O ( l o g n ) O(logn) O(logn) ,进制转换的时间复杂度 O ( l o g 3 n ) O(log_3n) O(log3n)。
- 空间复杂度 : O ( 1 ) O(1) O(1) ,只使用常数级空间 。