2014-03-26 29 views
-1

我遇到以下問題。遞歸 - 使用一種方法將字符串輸入的每個字符和最後一個字符的每個字符加上一個方法

遞歸方法公共靜態字符串doSomeMagic(「測試」)應該返回:

TTeesstt 
TTeess 
TTee 
TT 

我已經實現了這個行爲是這樣的:

public static String rowFunction(String s) { 
    String toReturn = new String(); 

    if (!s.isEmpty()) { 
     toReturn = String.valueOf(s.charAt(0)); 
     toReturn += toReturn + rowFunction(s.substring(1)); 
    } 
    return toReturn; 
} 

public static String doSomeMagic(String s) { 
    String toReturn = new String(); 

    if (!s.isEmpty()) { 
     toReturn = rowFunction(s) + "\n" + doSomeMagic(s.substring(0, s.length() - 1)); 
    } 
    return toReturn; 
} 

怎麼能只達到這個一個功能?有任何想法嗎?

+0

@SotiriosDelimanolis我應該如何重命名它?英語不是我的母語,我不知道如何確定問題的標題。任何意見,將不勝感激。 – Endzeit

+0

@SotiriosDelimanolis哦,當然。你是對的。感謝提示。 – Endzeit

+1

另外,您可能在代碼審查或程序員堆棧交換網站上運氣更好。 –

回答

1

我注意到你想做這個沒有循環和在一個函數調用。你可以清理更多。這是它:

public static String doSomeMagic(String s) { 
    if (!s.isEmpty()) { 
     StringBuffer sb = new StringBuffer(); 
     return sb.append(s.replaceAll("(\\S)", "$1$1")) 
       .append("\n") 
       .append(doSomeMagic(s.replaceAll(".$", "")) 
       .toString(); 
    } 
    return ""; 
} 
+0

我沒有看到你的答案,但這太棒了!我有點慚愧,這種使用RegEx的方法還沒有想到。謝謝! – Endzeit

-1

快速的解決方案也能像

testMethod(string ip){ 
    if(ip.length()==1){ 
     ip=ip.toUppercase(); 
    } 
    For(int i=0;i<ip.length()-1;i++){ 
     System.out.print(ip.charAt(i)+""+ip.charAt(i)); 
    } 
    if(ip.length()>1){ 
     System. out. println(); 
     testMethod(ip.substring(1)); 
    } 
} 

沒有測試...但應該工作相當

+0

我希望它是完全遞歸,而不是迭代。不管怎麼說,還是要謝謝你。 :) – Endzeit

+0

這是遞歸調用testMethod –

+0

當然,但它也是迭代使用循環。 – Endzeit

1

要做到這一點的一個功能,只需遍歷字符串,而不是調用另一個遞歸函數。

public static String doSomeMagic(String s) { 
    String doubled = new String(); 
    if (s.length() == 0) return s; 
    for(int i=0;i<s.length();i++) 
     doubled += s.substring(i,i+1) + s.substring(i,i+1) 
    return doubled + "\n" + doSomeMagic(s.substring(0, s.length()-1)); 
} 
+1

哎。請,如果你正在做新的String()或double + = ...,請使用StringBuilder代替。如果s是1024個字符,請查看這種方法的內存使用情況。 – 2014-03-26 19:14:32

+0

哦,我同意。我只是試圖儘可能多地使用OP的代碼來簡化事情。 – Roger

+0

@MichaelT這是否也是我的代碼中的錯誤方法?如果是這樣 - 爲什麼?正在調用s + = s +「abc」與s = s + s +「abc」不一樣嗎?或者應該使用(Stringbuilder sb)sb.append(「xy」); sb.append(sb.toString); sb.append( 「ABC」);代替? – Endzeit

相關問題