1780: Check-if-Number-is-a-Sum-of-Powers-of-Three
Medium
I saw 2 solutions.
The first one was to repeatedly subtract the largest power of
3
from n
, and then:
Code:
class Solution {
public:
bool checkPowersOfThree(int n) {
for (int i = ceil(log(n)/log(3)); i >= 0; --i) {
if (n >= pow(3, i)) {
-= pow(3, i);
n }
}
if (n == 0) {
return true;
}
return false;
}
};
Complexity:
The other solution was to just repeatedly divide n
by 3
; if n
is made up of only powers of
3
, then the remainder of n/3
should
always be either 0
or 1
.
Therefore, to see if n
is made up of only powers
of 3
, we can just check n % 3
and
repeatedly floor divide n
until we get
n%3 == 2
, where we return false
, or
until n == 0
, where we return true
.
Code:
class Solution {
public:
bool checkPowersOfThree(int n) {
while (n > 0) {
int remainder = n%3;
if (remainder == 2) {
return false;
}
/= 3;
n }
return true;
}
};