【leetcode】6. ZigZag Conversion

本文介绍了如何解决LeetCode上的第6题——ZigZag字符串转换。通过对给定字符串在特定行数下形成的ZigZag模式进行分析,找出将字符串按ZigZag方式转换的规律。作者发现转换后的字符位置与原字符串位置的索引关系为index=r+2*c,并提供了根据这个规律实现转换的代码,时间复杂度为O(n)。
摘要由CSDN通过智能技术生成

题目:
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)

P A H N

A P L S I I G

Y I R

And then read line by line: “PAHNAPLSIIGYIR”

Write the code that will take a string and make this conversion given a number of rows:

string convert(string s, int numRows);


思路:
实际上蕴含着一些规律。把所有answer矩阵中元素的(r,c)坐标(r是行号,c是列号)与对应原字符串s中的位置index(index从0开始)都列出来,你就会发现一个规律:index=r+2*c。是不是很神奇!哈哈哈!

具体分析如下:
注:n就是题目中的numRows。
例如,n为4,字符串s长度为15(具体内容不重要)。其(r,c)与index映射关系如下:

矩阵中的位置(r,c) 原数组中的位置index
(0,0) 0
(0,3) 6
(0,6) 12
(1,0) 1
(1,2) 5
(1,3) 7
(1,5) 11
(1,6) 13
(2,0) 2
(2,1) 4
(2,3) 8
(2,4) 10
(2,6) 14
(3,0) 3
(3,3) 9

我们可以发现一个规律:index=r+2*c。这样我们就可以知道answer矩阵中每个位置应该输出的元素是什么。

=========================================================================

接下来就要分析矩阵元素的分布规律了。通过画个图就能发现其中的规律。例如,n为7,字符串s长度为31时,分析如下:
在这里插入图片描述
规律已经很明显了 。按照图上规律,按行遍历矩阵中所有元素的坐标(不存在就不要遍历),然后将(r,c)转化成index,然后输出元素即可。


代码实现如下,时间复杂度应该为   O ( n ) \ O(n)  O(n)

class Solution 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值