美文网首页
算法---构造zigzag字符串

算法---构造zigzag字符串

作者: reedthinking | 来源:发表于2017-06-25 21:23 被阅读0次

输入一个字符串,输出其zigzag形式,例如输入"PAYPALISHIRING",要3行
P A H N
A P L S I I G
Y I R
按行读取结果则为"PAHNAPLSIIGYIR"

package reed.kotlindemo.algo


/**
 * Created by thinkreed on 2017/6/25.
 */

fun zigZag(str: String, numRows: Int): String {
/*                n=numRows,zigzag的具体表现如下,先向下numRows个数,再斜向上numRows - 1个数,
    1                           2n-1                         4n-3 第一行的下标差Δ=2 * (n - 1)
    2                     2n-2  2n                    4n-4   4n-2
    3               2n-3        2n+1              4n-5       .
    .           .               .               .            .    中间第i行的下标差则分为两种情况,斜线上的数和前
    .       n+2                 .           3n               .    一个直线上的数差2*(n - i),和后一个直线上的数差2 * (i - 1)
    n-1 n+1                     3n-3    3n-1                 5n-5
    n                           3n-2                         5n-4 最后一行的下标差Δ=2n-2
*/

    if (numRows == 1) return str

    var result = ""

    for (i in 0 until numRows) {

        var k = i
        var j = 0

        while (k < str.length) {
            result += str[k]
            //j为偶数,下标差Δ=2 * (numRows - i - 1),为奇数下标差Δ=2 * i
            k += if (((i == 0) or (j % 2 == 0)) && i != numRows - 1) 2 * (numRows - i - 1) else 2 * i
            j++
        }
    }
    return result
}

相关文章

  • 算法---构造zigzag字符串

    输入一个字符串,输出其zigzag形式,例如输入"PAYPALISHIRING",要3行P A H ...

  • LeetCode 6

    6. ZigZag Conversion 字符串“PAYPALISHIRING”,给定一个行数,使用zigzag模...

  • LeetCode - 0006 - ZigZag Convers

    题目概要 将字符串按照ZigZag的顺序重新排列,求排列之后的新字符串。 题目链接 ZigZag Conversi...

  • KMP算法python实现

    KMP算法是一种字符串匹配算法,也就是在字符串t找到与字符串p相等的子串,这个算法的核心是根据字符串p构造一个状态...

  • ZigZag Conversion

    每日算法——letcode系列 问题 ZigZag Conversion Difficulty: Easy The...

  • LeetCode 6. ZigZag Conversion

    [Chinese ver] 6. ZigZag Conversion 字符串"PAYPALISHIRING"是通过...

  • 每天一题LeetCode【第1天】

    T6. ZigZag Conversion 【Easy】 题目 把字符串 "PAYPALISHIRING" 用Zi...

  • zigzag

    zigzag算法,我觉得本质还是一维与二维转化,原始串可以看作是zigzag的特例:所有字符处在同一高度,而宽度是...

  • LeetCode题解之上升下降字符串

    上升下降字符串 题目描述 给你一个字符串 s ,请你根据下面的算法重新构造字符串: 从 s 中选出 最小 的字符,...

  • LeetCode-1370-上升下降字符串

    给你一个字符串 s ,请你根据下面的算法重新构造字符串:从 s 中选出 最小 的字符,将它 接在 结果字符串的后面...

网友评论

      本文标题:算法---构造zigzag字符串

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