题目:LeetCode 006 ZigZag Conversion
题意:给一个字符串"PAYPALISHIRING"
按照ZigZag的形式,即按照下面的顺序排列,然后
在转换成一行一行的读取方式,得到"PAHNAPLSIIGYIR"。其中行数不定。
思路:肯定是不能去开一个二维数组的,必须要找出规律来直接输出。发现间隔是和总行数numRows有关,另外,第一行和最后一行需要单独考虑,每两个字符间隔一致,为2*(numRows-1);其余行有两种间隔,设当前为第L行,则第一个间隔为2*(numRows-L),第二个间隔为2*(L-1)。
但是这样我提交后MLE,又是没有考虑特殊情况也是醉了。如果numRows = 1,则单独将第一行和最后一行提出来会出错,只需要返回原字符串即可。
代码如下:
1 class Solution { 2 public: 3 string convert(string s, int numRows) { 4 if(numRows == 1) return s; 5 6 string ans = ""; 7 int len = s.size(); 8 9 int now = 0; 10 while(now < len) 11 { 12 ans += s[now]; 13 now += 2*(numRows-1); 14 } 15 16 for(int i = 2; i < numRows; i++) 17 { 18 now = i-1; 19 while(now < len) 20 { 21 ans += s[now]; 22 now += 2*(numRows-i); 23 if(now < len) 24 { 25 ans += s[now]; 26 now += 2*(i-1); 27 } 28 else break; 29 } 30 } 31 now = numRows-1; 32 while(now < len) 33 { 34 ans += s[now]; 35 now += 2*(numRows-1); 36 } 37 return ans; 38 } 39 };
时间: 2024-12-14 04:18:34