ZigZag Conversion

简介:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

字符串“PAYPALISHIRING”以Z字形图案写在给定数量的行上,如下所示:

leetcode --ZigZag Conversion 随笔 第1张

其实也就是蛇形字符串但端点不重复的情况

我们按行输出的结果是 : “PAHNAPLSIIGYIR”

条件是方法中传入一个字符串 s ,一个行数要求 numRows

string convert(string s, int numRows);

举例

1:

输入: s = “PAYPALISHIRING”, numRows = 3

输出: “PAHNAPLSIIGYIR”

2:

输入: s = “PAYPALISHIRING”, numRows = 4

输出: “PINALSIGYAHRPI”

解释:

leetcode --ZigZag Conversion 随笔 第2张

解法一:Sort by Row

我们可以定义一个List 元素是StringBuilder类型, 代表着每一行的字符串,再通过定义两个标志为当前行curRow和换行方向goingDown,当到第一行和最后一行时改变方向(从上到下和从下到上)

leetcode --ZigZag Conversion 随笔 第3张

复杂度分析:

时间复杂度 : O(n) 都是一次遍历

空间复杂度: O(n).

解法2: Visit by Row

因为我们所取的每一行字符串是有规律的写入的,,P A Y P A L 可以看作一个循环规律为2n-2,可以按2n-2来添加字符串

leetcode --ZigZag Conversion 随笔 第4张

leetcode --ZigZag Conversion 随笔 第5张

复杂度分析:

时间复杂度 : O(n) 我们对给定的字符串s中的每个字符s.charAt()只访问一次

空间复杂度: O(n).

注:

1.substring() string 是小写;

小白刷题之路,请多指教— — 要么大器晚成,要么石沉大海

leetcode --ZigZag Conversion 随笔 第6张

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄