2017-04-17 98 views
-2

我的方法是,例如,如果int [] num123 = {1,2,3};應該輸出123。在主要方法。它正在輸出零點。在convert num方法中,當我更改最後一個零時,它只是輸出它被替換的任何數字。我們不允許使用任何循環,所以這就是我難住的。遞歸方法問題

public int convertNum(int[] num) { 

    return numHelper(num, 0, num.length - 1, 0); 

} 

private int numHelper(int[] num, int atIndex, int lastIndex, int result) { 

    atIndex = num.length - 1; 
    if (atIndex == lastIndex) { 
     return result; 
    } 

    if (num.length > 0) { 
     atIndex += 1; 

    } 

    return (int) (num[atIndex] * Math.pow(10, lastIndex - atIndex)) 
      + numHelper(num, atIndex + 1, lastIndex, result); 

} 
+4

傳遞參數'atIndex'的意義是什麼,當你做的第一件事是用'atIndex = num.length - 1'代替時,**立即結束遞歸**? – Andreas

+0

固定。現在它是outoutput 20 –

+0

請澄清您的具體問題或添加額外的細節,以確切地突出你所需要的。正如目前所寫,很難確切地說出你在問什麼。 –

回答

0

你可能會改變你的遞歸邏輯。您只能通過nums[]indexresult

private int numHelper(int[] nums, int atIndex, int result) { 
    if (atIndex == nums.length) { 
     return result; 
    } 

    int check = result;     // save previous result 
    result = result * 10 + nums[atIndex]; 

    // result might cycle through Integer.MIN_VALUE after hitting the Integer.MAX_VALUE 
    if(check > result) { 
     throw new NumberFormatException(); 
    } 
    return numHelper(nums, ++atIndex, result); 
} 

呼叫從自己的主類此方法或任何其他方法

public int convertNum(int[] num) { 
    // say, nums = new int[]{1,2,3} 
    return numHelper(num, 0, 0); // atIndex and result are 0 
} 

樣品測試
輸入:nums = { 1,2,3}輸出:123
輸入:nums = { 8,9,1,2,3,4,9,3,5,1 }輸出:java.lang.NumberFormatException
輸入:nums = { 8,9,1,2,3,4,9,3,5,1 }輸出:322414759當您評論throw關鍵字

請注意,由於整數在整個範圍內循環,您可能會得到不正確的結果。
注意:請確保您的陣列具有Integer.MAX_VALUE | 2147483647範圍內的元素並始終使用throw new NumberFormatException();

+0

非常感謝! –

+0

@ J.Doe,請記住,你總是可以對你發現的答案讚不絕口。我會很感激。謝謝。 –

+0

只是再次感謝。 –