LeetCode(7) 字形变换

xbdyhh · · 300 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:

L   C   I   R
E T O E S I I G
E   D   H   N

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。
思路:
这道题实际上就是实现字符串的蛇形排列,到达了最大行数之后,就需要折头。所以对每行设置一个byte类型的数组,设置变量a实现到达n行后的转换,判断条件为增加了n-1次。因为第一次i=0也能被n-1整除,也会发生一次a的变换,所以设置a的值为-1.
tip:因为判断为n-1次的整除,如果numRows为1会出现除0的情况,并且numRows=1不需要进行变换,所以一开始需要进行判断。

func convert(s string, numRows int) string {
    if(numRows == 1){
        return s
    }
    chars := make([][]byte,numRows)
    ans := make([]byte,0)
    n := len(s)
    j := 0
    a := -1
    for i :=0;i<n;i++{
        chars[j] = append(chars[j],s[i])
        if(i % (numRows-1) == 0){
            a = -a
        }
        j =j+a
    }
    for i:=0;i<numRows;i++{
        ans = append(ans,chars[i]...)
    }
    return string(ans)
}

运行结果如下:
image.png


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:xbdyhh

查看原文:LeetCode(7) 字形变换

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

300 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传