所以关键问题是假设存在 3x < n
,那么是否存在 ∑i3i = n, i < x,
结论显然是否定的,因为有 $\sum\limits_{i=0}^{x
- 1} 3 ^ i < 3^x$ ,故不存在 ∑i3i = n, i < x,所以贪心策略是可行的
1 2 3 4 5 6 7 8 9 10 11
# Code language: Python classSolution: defcheckPowersOfThree(self, n: int) -> bool: base = 3 while base * 3 <= n: base *= 3 while base: if n >= base: n -= base base //= 3 return n == 0
1 2 3 4 5 6 7 8 9 10 11 12
// Code language: Java classSolution { publicbooleancheckPowersOfThree(int n) { longbase=1, t = n; while (base * 3 <= t) base *= 3; while (base > 0) { if (t >= base) t -= base; base /= 3; } return t == 0; } }
1 2 3 4 5 6 7 8 9 10 11 12 13
// Code language: C++ classSolution { public: boolcheckPowersOfThree(int n){ longlong base = 1, t = n; while (base * 3 <= t) base *= 3; while (base > 0) { if (t >= base) t -= base; base /= 3; } return t == 0; } };
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/* Code language: JavaScript */ /** * @param {number} n * @return {boolean} */ var checkPowersOfThree = function(n) { var base = 1; while (base * 3 <= n) base *= 3; while (base > 0) { if (n >= base) n -= base; base /= 3; } return n == 0; };