给定正整数a的3的幂



给定一个正整数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

最新更新