繁体   English   中英

给定正整数 A 的 3 次幂

[英]Powers of 3 for a given a positive integer A

给定一个正整数 A,返回一个最小长度的数组,其元素是 3 的幂,并且所有元素的总和等于 A。

对于输入 A = 13:

  • 3 0 = 1, 3 1 = 3, 3 2 = 9。
  • 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的人来说,它可能很有用

class Solution: # @param A : integer # @return 一个整数列表 def solve(self, A): bits = [] solution = []

    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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM