javascript练习题之z字形变换

题目:将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:
在这里插入图片描述
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”

解析:重点看需要输出的结果!!!!!根据上面的图片可知,其就是需要将字符拆开分别放在 第一列、第二列、第三列、第二列、第一列…然后将放在第一列、第二列、第三列的字符依次进行合并。
要点:定义一个索引index判断当时位于的列数,当index0,位于第一列,且接下来则是第二列、第三列,当indexnumRow-1时;则说明已经位于了第三列,则接下来是第二列、第一列,依次循环。具体代码如下:
解析一:

var convert = function(s, numRows) {
    //当numRows为1时直接返回s
    if(numRows==1){
    return s;
    }
    //定义一个数组用来保存每列中含有的字符串
    //arr=["","","",.....]
    let arr =new Array(numRows).fill("");
    //down 用来判断是从第一列-->第三列(为true),还是第三列--->第一列(为false)
    let down =true;
    //index判断当前的所在的列
    let index =0;
    //依次取出单个s中的单个字符
    for(let str of s ){
    	//将其添加到相应的列中,
        arr[index] +=str;
        //通过判断确定down的值
        if(index ==0){
          down =true;
        }else if(index ==numRows-1){
          down =false;
        }
        //根据down的值计算出index的值,如果是从第一列-->第三列(为true)则index加1;反之减1
        index =down?index+1:index-1;
    }
    //最后将每列中的字进行合并
    let res_str ="";
    for(const str of arr){
       res_str+=str;
    }
  return res_str;
};

解析二:此方法来源力扣中该题的热门解析,思想和解析一一样,只是写法不一样

var convert = function(s, numRows) {
  if(numRows===1){
      return s;
  }
  let down = true;
  let index = 0;
  let arr = new Array(numRows).fill('');
  arr.forEach.call(s,str=>{
    arr[index ]+=str
    if(index ==0){
        down =true;
    }else if(index ==numRows-1){
        down =false;
    }
    index +=down ?1:-1
  })
  return arr.join('')
};

本文章仅作为个人的学习记录,具体解题思路请查看以下网址!
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zigzag-conversion

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值