美文网首页
LeetCode 6 Z字形变换 zigzag-conversi

LeetCode 6 Z字形变换 zigzag-conversi

作者: 叽翅 | 来源:发表于2019-09-27 14:57 被阅读0次

    1、如图,每个红框内可以视为一组,把整个字符串按 2n-2 切割

    [[L E E T C O], [D E I S H I], [R I N G _ _]]

    WX20190917-145303@2x.png

    2、那么,我们先把每一组的第一位输出

    L D R

    WX20190917-144822@2x.png

    如图,此时字符串还剩下
    [[E E T C O], [E I S H I], [I N G _ _]]

    对于每一组,其实只是要输出首尾两端的字母就行了
    第一次输出: E O E I I
    第二次输出: E C I H N
    第三次输出: T S G

    3、代码

    func Min(x, y int) int {
        if x < y {
            return x
        }
        return y
    }
    func convert(s string, numRows int) string {
        // 16 ms, 6.7 MB
        if len(s) < 2 || numRows < 2 {
            return s
        }
        div := numRows + (numRows - 2)
    
        // 将字符串按V字形来切分为数组
        divS := []string{}
        for i := 0; i < len(s); i += div {
            divS = append(divS, s[i:Min(i+div, len(s))])
        }
        // 将数组中每个元素的第一位取出
        res := ""
        for _, each := range divS {
            res += string(each[0])
        }
    
        // 使用i, j两个游标来从两端取值
        for i, j := 1, div-1; i <= j; i, j = i+1, j-1 {
            for _, each := range divS {
                if i < len(each) {
                    res += string(each[i])
                }
                if j < len(each) && i != j {
                    res += string(each[j])
                }
            }
        }
        return res
    }
    

    题解: https://leetcode-cn.com/problems/zigzag-conversion/solution/bu-kuai-dan-te-wu-nao-de-yi-ge-jie-fa-z-by-zsdos/

    相关文章

      网友评论

          本文标题:LeetCode 6 Z字形变换 zigzag-conversi

          本文链接:https://www.haomeiwen.com/subject/vdbhuctx.html