[英]Method to print a char array in reverse order using recursion?
您好,我正在嘗試創建一種使用遞歸以相反順序打印 char 數組的方法?
這是我到目前為止所做的:-
public class StringReverseOnCharArray {
public static void main(String[] args) {
reverseRecursively(new char[]{'a','b','c'});
}
private static void reverseRecursively(char[] myCharArr)
{
System.out.println(myCharArr[myCharArr.length-1]);
char [] temp=
// what next??
reverseRecursively(temp);
}
}
我認為臨時 char 數組可以,但我應該怎么做才能從原始 char 數組中刪除最后一個元素並創建一個臨時數組? 還是有其他方法可以做到這一點?
您可能可以使用System.arraycopy
這是一個解決方案。
private static void reverseRecursively(char[] myCharArr, int next) {
if (next >= myCharArr.length)
return;
// use recusion BEFORE printing in order to print in reversed order
reverseRecursively(myCharArr, next+1);
System.out.println(myCharArr[next]);
}
對該方法的第一次調用應使用 0 作為“下一個”索引:
reverseRecursively(myCharArr, 0);
正如所指出的,這通常不是遞歸完成的。 所以這個解決方案不好,但它有效:
public class StringReverseOnCharArray {
public static void main(String[] args) {
reverseRecursively(new char[] { 'a', 'b', 'c' });
}
private static void reverseRecursively(char[] myCharArr) {
if (myCharArr.length > 0) {
System.out.println(myCharArr[myCharArr.length - 1]);
char[] temp = new char[myCharArr.length - 1];
for (int i = 0; i < temp.length; i++) {
temp[i] = myCharArr[i];
}
reverseRecursively(temp);
}
}
}
更新的答案:
我想我誤解了。 如果您必須使用聲明的函數並只填寫temp
位,並且您只需要以相反的順序輸出數組(實際上並不更改其內容),那么這很簡單:只需將temp
復制一份length - 1
字符數組(可能使用System.arraycopy
)並將新的、較短的數組傳遞給函數。 如果您收到的數組只有一個字符長,請不要這樣做; 這就是你的遞歸終止條件(你總是必須有一些東西來停止遞歸,它應該是你在考慮遞歸做某事時首先考慮的事情之一)。
原答案:
在我看來,告訴你對問題使用錯誤技術的作業並不是一個非常有用的作業。 有各種適合的遞歸教學練習; 這不是其中之一。
但是讓我們看看任務:
遞歸的目標基本上是在問題的不同部分重復做某事,直到您完成整個問題。 更好的例子是遍歷樹結構。
所以看看這個問題,你的目標是交換數組中的字符,直到數組被反轉。 這里重復的東西是什么? 交換字符。
所以我可能會通過將索引傳遞給函數來完成它,並讓函數將該索引處的字符與length - index
位置處的字符交換(例如,交換第一個和最后一個,然后是第二個和第二個- 到最后等)。 然后讓它用index + 1
調用自己。
所有遞歸基本上都必須有一個“停止”條件:函數不再調用自身的點。 在您的情況下,這將是index >= length_of_array / 2
。
請注意,我還沒有發布代碼。 編寫代碼的目的是完成作業、完成課程; 這是學習的重要組成部分。
時間復雜度為 O(n),空間復雜度為 O(1)
def revStr(a,b,str):
if(a-b>len(str)):
return str
else:
str[a],str[b]=str[b],str[a] #Pythons way of replacing characters
return revStr(a+1,b-1,str)
此解決方案不采用新參數,也無需創建新的 Char 數組。
class Solution {
int n=0;
public void reverseString(char[] c) {
if (n>(c.length-1)/2)
return;
char t = c[n];
c[n] = c[c.length-n-1];
c[c.length-n-1] = t;
n++;
reverseString(c);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.