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