如何重新安排号码

时间:2015-05-28 05:58:54

标签: java algorithm combinations

我有一个号码需要重新安排才能找到最大号码。作为示例,输入数字是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);

}

但是我很困惑如何在重新排列数字后找到输入的最大数字。

2 个答案:

答案 0 :(得分:0)

除非您确实需要创建所有组合,否则我不会打扰。 你实际上可以使用算术来做,但在这种情况下,它在字符串方面可能更容易

天真算法:

  • source number = number.toString()
  • 目标编号=&#34;&#34;
  • 源数不为空
    • d =从源号中删除最大数字
    • 目标编号+ = d

如果需要,您可以将目标号码转换回int。

另一种方法是计算9的数量,并在结果中附加许多9。重复8s,然后7s,然后6s ......

答案 1 :(得分:0)

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

试用此代码:

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);
}