2014-10-20 22 views
-2

所以我需要開發一種方法來查找整數中最小的數字。從整數中找到最小數字的方法

+1

我想我可以做MOD 10,然後比較? – CLearner 2014-10-20 17:45:29

+0

@CLearner是的,你可以,這是正確的方法。現在你的基本情況和遞歸步驟是什麼? – 2014-10-20 17:59:55

+0

作爲一個觀點,我認爲你不應該接受一個答案,直到你得到一個正確的解釋兩件事:尾遞歸(即使Java仍然[沒有保證的尾部調用優化](http://stackoverflow.com/questions/3616483/why-does-the-jvm-still-not-support-tail-call-optimization),但只是原則上和學習這個重要的遞歸概念)和對數遞歸深度。用Java遞歸做這件事完全沒有意義,除了學習這兩件事。 – hyde 2014-10-20 18:11:47

回答

0
public static int find(int num) { 
    if(num < 10){ 
     return num; 
    } 
    int d = num % 10; 
    int pmin = find(num/10); 
    return (d <= pmin) ? d : pmin; 
} 
+0

非常感謝。什麼是pmin在這裏? – CLearner 2014-10-20 17:48:58

+0

先前的分鐘,即在xyz中的z,因爲來自遞歸調用的下一分鐘將來自xy – afzalex 2014-10-20 17:50:09

+0

對於數字0,這失敗了,假設工作解決方案應該返回0。 – hyde 2014-10-20 18:40:10

2

這是我實現

public int find(int n){ 
    if(n < 10) return n; 
    return Math.min(n%10, find(n/10)); 
} 

您可以通過長修改int ...

0

我個人認爲,一個for循環會更快,更容易比遞歸函數。但是對於遞歸或for循環,你需要迭代一些東西。最簡單的方法是將數字轉換爲字符串,然後遍歷它進行所需的比較。

在你的主:

int i = 578329; 
String s = Integer.toString(i); 
s = FindSmallest(s); 

調用該函數:

private String FindSmallest(String s){ 
    if(s.length() <= 1) 
     return s; 
    String sFirstChar = s.substring(0,1); 
    String sSecondChar = s.substring(1,2); 
    int iFirst = Integer.parseInt(sFirstChar); 
    int iSecond = Integer.parseInt(sSecondChar); 

    if(iFirst < iSecond) 
     return FindSmallest(sFirstChar + s.substring(2)); 
    else 
     return FindSmallest(sSecondChar + s.substring(2)); 
} 
1

如果您有興趣學習如何算出這個自己(和你應該),我會嘗試以下這些步驟。

  1. 在您的腦海中慢慢地或者甚至更好地將這些步驟寫在紙上!注意你採取的每一步。

    Step one may be: look at the first digit

  2. 考慮你所創建的步驟。有沒有似乎重複自己的部分?這些部分可能是您的遞歸函數。

  3. 重寫步驟遞歸函數(純英文)

  4. 翻譯的步驟到您的編程語言; Java,在這種情況下。

如果你願意,你甚至可以離開這個簡單的英語步驟中的每一行作爲註釋背後的代碼,這樣每個人都可以很容易地按照你的代碼

+0

非常感謝你提示我如何去做,我想到了mod 10,然後我知道如何比較它,並得到最小的數字 – CLearner 2014-10-20 19:00:08

相關問題