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

前端的一道面试题,关于:“编写一个递归版本的 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);
        }
    }


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/

如果喜欢这篇文章,欢迎添加下角“公众号” ,可以第一时间获到文章推送

bug收集

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bug收集

谢谢老板的鼓励,我会继续加油

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值