2015-05-28 89 views
-3

我有一個號碼,我需要重新安排找到最大的號碼。作爲一個例子,輸入數字是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

除非您確實需要創建所有組合,否則我不打擾。 實際上,你可以用做算術,但在這種情況下,它在字符串中的條款可能更容易

天真的算法:

  • 源數= number.toString()
  • 目標號碼=「」
  • 雖然源數不爲空
    • d =從源數除去最大數
    • 目標數+ = d

如果需要,可以再轉換目標回數爲int。

另一種方法是計算9的數量並在結果中附加多個9。重複8s,然後7s,然後6s ...

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