class Solution {
public boolean checkPowersOfThree(int n) {
List<Integer> powerof3 = new ArrayList();
for (int i = 0; i < 20; i ++) {
if (Math.pow(3, i) <= 10000000) {
powerof3.add((int) Math.pow(3, i));
} else {
break;
}
}
Collections.reverse(powerof3);
return dfs(powerof3, n, 0);
}
private boolean dfs(List<Integer> powerof3, int n, int i) {
if (n == 0) return true;
if (i == powerof3.size()) return false;
int power = powerof3.get(i);
if (power > n) {
return dfs(powerof3, n, i + 1);
} else {
return dfs(powerof3, n - power, i + 1) || dfs(powerof3, n, i + 1);
}
}
}