doubleyong
管理员
管理员
  • 最后登录2025-12-02
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:4637回复:0

[其它]【算法】javascript 递归实现 reverse(s) ,将字符串倒置

楼主#
更多 发布于:2021-01-24 19:54
前端的一道面试题,关于:“编写一个递归版本的 reverse(s) 函数,以将字符串s倒置。”


01、分 析

功能:字符串s倒置(倒序)

方法:递归

分析:
若将字符串"hello",实现倒置;先将每一位放到倒数第一位,然后,将第一位放到倒数二,依次交换,直到倒数位和第一位为同一位结束;

如下:

 var str = "hello";   //olleh

  elloh     第一位,放到倒数第一   交换4
  lloeh     第一位,放到倒数第二   交换3
  loleh     第一位,放到倒数第三   交换2
  olleh     第一位,放到倒数第四   交换1

02、递归实现

分析:
1、方法接受两个参数,arr,len
     arr:数组类型,即将字符串将成的数组
     len:长度,控制数组交换顺序的次数

2、如果len长于1,小于len-1,则对数组的值进行换行;可实现将数组第一位的值,放到 len 对应的位置上

3、执行完1,2后,len--; 继续调用此方法changeStr(arr,len);

注:函数不需要返回值,因为arr是数组,即为引用类型,它的改变了,原实参也会发生改变;

代码如下:
/**
    * arr:字符串数组
    * len:长度
    */
function changeStr(arr,len){
       if(len>1){
           for(var i=0;i<len-1;i++){
               var temp = arr<i>;
               arr<i> = arr[i+1];
               arr[i+1] = temp;
           }
           len--;
           changeStr(arr,len);
       }
   }</i></i>

03、完整Demo


下面写了一个完整Demo,对上面的方法进行测试,测试通过;
代码如下:
<script type="text/javascript">
    var str = "bugshouji.com";
    var re = reverse(str);
    console.log(re);
    function reverse(s){
        var arr = s.split("");
        changeStr(arr,arr.length);
        return arr.join("");
    }
    /**
     * arr:字符串数组
     * len:长度
     **/
    function changeStr(arr,len){
        if(len>1){
            for(var i=0;i<len-1;i++){
                var temp = arr<i>;
                arr<i> = arr[i+1];
                arr[i+1] = temp;
            }
            len--;
            changeStr(arr,len);
        }
    }
</script>
视频讲解:https://www.bilibili.com/video/BV1CA411H7Nj/

如果喜欢这篇文章,欢迎添加右下角“公众号” ,可以第一时间获到文章推送
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号