我有一个号码需要重新安排才能找到最大号码。作为示例,输入数字是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);
}
但是我很困惑如何在重新排列数字后找到输入的最大数字。
答案 0 :(得分:0)
除非您确实需要创建所有组合,否则我不会打扰。 你实际上可以使用算术来做,但在这种情况下,它在字符串方面可能更容易
天真算法:
如果需要,您可以将目标号码转换回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);
}