Java 如何重新安排号码

Java 如何重新安排号码,java,algorithm,combinations,Java,Algorithm,Combinations,我有一个号码,我需要重新安排以找到最大的号码。作为一个例子,输入数字是355,因此对于这个数字,我需要找到通过重新排列数字可以形成的最大数字。因此,对于355,在重新安排之后,可以进行各种组合- 355, 535 and 553 所以这里553是最大的数字,这就是我需要返回的。基本上给定一个输入,我需要找到通过重新排列数字可以形成的最大数字 我应该如何着手解决这个问题 到目前为止,我可以像这样洗牌: public static void main(String[] args) { //

我有一个号码,我需要重新安排以找到最大的号码。作为一个例子,输入数字是355,因此对于这个数字,我需要找到通过重新排列数字可以形成的最大数字。因此,对于355,在重新安排之后,可以进行各种组合-

355, 535 and 553
所以这里553是最大的数字,这就是我需要返回的。基本上给定一个输入,我需要找到通过重新排列数字可以形成的最大数字

我应该如何着手解决这个问题

到目前为止,我可以像这样洗牌:

public static void main(String[] args) {
    //generate random number
    int number = 355;

    //put each digit in an element of a list
    List<Character> numberList = new ArrayList<Character>();
    for (char c : String.valueOf(number).toCharArray()) {
        numberList.add(c);
    }

    //shuffle
    Collections.shuffle(numberList);

    //output
    String shuffledNumber = "";
    for (Character c : numberList) {
        shuffledNumber += c;
    }
    System.out.println(shuffledNumber);

}

但我很困惑,在重新排列数字之后,如何才能找到给定输入的最大数字。

除非您确实需要创建所有组合,否则我不会费心。 实际上,您可以使用算术进行计算,但在这种情况下,使用字符串可能更容易

朴素算法:

源编号=number.toString 目标编号= 而源编号不为空 d=从源编号中删除最大编号 目标数量+=d 然后,如果需要,您可以将目标编号转换回整数


另一种方法是计算9的数量,并将多个9附加到结果中。重复8秒,然后7秒,然后6秒…

如果您需要重新排列数字,这样,如果我们从左读到右写,它应该是所有排列中最大的数字, 那么很简单,你只需要按降序对数字进行排序

请尝试以下代码:

public static void main(String args[]) {
    //generate random number
    int number = 355;

    String numStr = number + "";
    char[] numCharArr = numStr.toCharArray();
    int[] numArr = new int[numStr.length()];

    for(int i = 0 ; i < numCharArr.length ; i ++) {
        numArr[i] = Integer.parseInt(numCharArr[i] + "");
    }


    // Sort in descending order
    for(int i = 0 ; i < numArr.length ; i ++) {
        for(int j = 0 ; j < i ; j ++) {

            if(numArr[i] > numArr[j]) {
                // swap
                int temp = numArr[i];
                numArr[i] = numArr[j];
                numArr[j] = temp;
            }

        }
    }

    String largestNumber = "";
    for(int i : numArr) {
        largestNumber += i;
    }

    System.out.println("The largest number is : " + largestNumber);
}