【LeetCode】ZigZag Conversion

    xiaoxiao2021-12-14  17

    Describe:

    The string “PAYPALISHIRING” is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

    字符串”PAYPALISHIRING”写的是在一个给定的行数,这样一个曲折的模式:(你可能想在一个固定的字体更加易读显示模式)

    也就是说,给定一个字符串和行数,将字符串按照从左至右,从上至下的形式(Z 字形)排列,然后按行输出。如图。

    Example:

    And then read line by line: (输出)”PAHNAPLSIIGYIR”

    string convert(string text, int nRows);

    convert(“PAYPALISHIRING”, 3) should return “PAHNAPLSIIGYIR”.

    Point:

    1、访问字符串中各个字符:

    (1)str[索引值] (2)str.charAt(索引值) (3)字符串->数组:str.split(“”)

    Step:

    1、直接输出情况

    当设置的行数为1(1行),直接输出。当行数大于字符串长度时(1列),直接输出。

    2、不要太过依赖于数组,找出规律,直接将字符串的字符按规律取出来。

    3、计算循环周期

    就是说拉链的对应两端隔了几个。如图红色框中的P和A的距离。这样就可以按照排列中的行取出来。

    循环周期的公式:2倍的行数 - 2。

    var cyc = 2*numRows - 2;

    因为,不管行数是多少,两列之间所有的字符都可以缩成一行,但是总会差首行和末行两个字符,加上第一列的字符,得出计算公式。

    4、计算中间行的间隔元素

    在计算中间行的时候会发现,每行都会有两条拉链之间的间隔元素。并且行数越多,中间的间隔元素也越多。现在固定一行 i,这一行所有间隔元素的循环公式为:列数 + 循环周期 - 2倍行数。

    var mid = j + cyc - 2*i;

    Code:

    Question:

    1、最初理解题目有误,是Z字型,而不是方波型。 2、误区:一直想把方波型存成二维数组的形式,然后按行取出。
    转载请注明原文地址: https://ju.6miu.com/read-964356.html

    最新回复(0)