Java面試題--如何用遞歸實現字符串反轉


用遞歸實現字符串反轉

題目描述:對一個字符串,如何用遞歸方式實現字符串的反轉。如字符串:“123456”,用遞歸實現反轉后,效果是“654321”。

思路:將字符串轉換成字符數組,每次截取字符串的首字符放到最后,並再次對剩余字符串遞歸截取首字符,直到滿足if條件(

originStr == null || originStr.length() <= 1)結束截取字符串操作。

 

遞歸實現字符串反轉 完成代碼如下:

public class Question39 {
        public static void main(String[] args) {
            System.out.println(reverse("123456"));
        }
        
        public static String reverse(String originStr) {
            if(originStr == null || originStr.length() <= 1) {
                return originStr;
            }
            
            
            return reverse(originStr.substring(1)) + originStr.charAt(0);
        }
}

親測結果:

 

下面說一下遞歸調用的代碼解析,也就是下面這行代碼:

public static String reverse(String originStr) {
            if(originStr == null || originStr.length() <= 1) {
                return originStr;
            }    
            return reverse(originStr.substring(1)) + originStr.charAt(0);
        }
return reverse(originStr.substring(1)) + originStr.charAt(0);這行語句中,originStr.charAt(0)是將originStr這個字符串的
第一位拿出來;
而reverse(originStr.substring(1))中的originStr.substring(1)表示把originStr這個字符串的索引為1及之后的字符(也就是originStr字符串
的第二個字符以后的子串,即"23456")拿出來。所以,執行一次遞歸后,“123456”字符串被分解為“23456”+‘1’。
由於return reverse(originStr.substring(1)) + originStr.charAt(0);這行語句中,reverse方法的存在,執行第二次遞歸,此時
originStr=“23456”,所以執行完第二次遞歸后,“23456”分解為“3456”+‘2’。
...依次類推,最后一次調用reverse方法時,也就是originStr = "6",可以看出字符串"6"滿足if(originStr == null || originStr.length() <= 1) 
中的第二個條件,所以執行if條件下的語句,

也就是返回originStr,即字符串"6"。所以整個調用棧就依次返回“6”+‘5’+‘4’+‘3’+‘2’+‘1’ = “654321”。
最后,控制台輸出打印“654321”。


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM