我有這個任務,需要我解壓縮一個以前壓縮的字符串。這 例子是遞歸解壓一個字符串
i4a --> iaaaa
q3w2ai2b --> qwwwaaibb
3a --> aaa
這是我到目前爲止已經寫的:
public static String decompress(String compressedText)
{
char c;
char let;
int num;
String done = "";
String toBeDone = "";
String toBeDone2 = "";
if(compressedText.length() <= 1)
{
return compressedText;
}
if (Character.isLetter(compressedText.charAt(0)))
{
done = compressedText.substring(0,1);
toBeDone = compressedText.substring(1);
return done + decompress(toBeDone);
}
else
{
c = compressedText.charAt(0);
num = Character.getNumericValue(c);
let = compressedText.charAt(1);
if (num > 0)
{
num--;
toBeDone = num + Character.toString(let);
toBeDone2 = compressedText.substring(2);
return Character.toString(let) + decompress(toBeDone) + decompress(toBeDone2);
}
else
{
toBeDone2 = compressedText.substring(2);
return Character.toString(let) + decompress(toBeDone2);
}
}
}
我的返回值是絕對可怕的。
"ab" yields "babb" somehow.
"a" or any 1 letter string string yields the right result
"2a" yields "aaaaaaaaaaa"
"2a3b" gives me "aaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbb"
我可以看到一個錯誤,唯一的地方,很可能是最後一節別的,因爲我並沒有做什麼,一旦數目達到0完全肯定,我必須停止使用該信遞歸之後。除此之外,我看不出有這樣令人恐懼的輸出的問題。
你爲什麼要用遞歸來做這件事? –
這是學習如何調試的好時機。 – shmosel