关于leetcode:LeetCode7-字形变换

30次阅读

共计 613 个字符,预计需要花费 2 分钟才能阅读完成。

将一个给定字符串依据给定的行数,以从上往下、从左到右进行 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)
}

运行后果如下:

正文完
 0