给定一个正整数a,返回一个最小长度的数组,该数组的元素是3的幂,并且所有元素的和等于a
对于输入A = 13:
- 3<一口>0一口>= 1,3<一口>1一口>= 3,3<一口>2> li>1 + 3 + 9 = 13.一口>
所以A = 13可以表示为1、3、9的和。
有更好的方法来解决这个问题吗?
public static int[] getSolve(int A) {
List<Integer> binary = new ArrayList<>();
while (A > 0) {
int r = A % 3;
binary.add(r);
A /= 3;
}
// System.out.println(binary.toString());
List<Integer> res = new ArrayList<>();
int j = 0;
for (int i = 0; i < binary.size(); i++) {
if (binary.get(i) != 0) {
while (j < binary.get(i)) {
res.add((int) Math.pow(3, i));
j++;
}
j =0;
}
}
return res.stream().mapToInt(i -> i).toArray();
}
这个问题的答案总是以3为进制,也称为三进制。
我最大的建议是不需要你的binary
数据结构。当你找到余数的时候,就在这里,然后你可以看到余数是否为,然后在你的答案上加上3的相应幂。
对于python用户,它可能很有用
类解决方案:# @参数A:整数返回一个整数列表def (self, A):位= []解决方案= []
while(A != 0):
bits.append(A % 3);
A = A // 3;
for i in range(len(bits)):
if(bits[i] != 0):
tmp = 0;
while(tmp < bits[i]):
solution.append(pow(3, i));
tmp = tmp + 1
return solution