zoukankan      html  css  js  c++  java
  • 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”。


  • 相关阅读:
    iOS-布局-Masonry
    Xcode-打开代码折叠带
    Xcode-显示代码行数
    iOS-UITextField-通知
    iOS-UITextField-常用方法
    iOS-UIButton-文字位置,字体大小,边角样式,button种类,点击事件,内容位置
    iOS-UIView-设置背景图片4种方式
    windows8.1 plsql连接oracle
    win7_oracle11g_64位连接32位PLSQL_Developer
    oracle字符集的查看和修改
  • 原文地址:https://www.cnblogs.com/Qinstudy/p/10054802.html
Copyright © 2011-2022 走看看