Cool说丨力扣6

简介: 6. Z 字形变换


6. Z 字形变换

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:

L   C   I   R

E T O E S I I G

E   D   H   N

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:

输入: s = "LEETCODEISHIRING", numRows = 3

输出: "LCIRETOESIIGEDHN"

示例 2:

输入: s = "LEETCODEISHIRING", numRows = 4

输出: "LDREOEIIECIHNTSG"

解释:

L     D     R

E   O E   I I

E C   I H   N

T     S     G

第一版,学到了,好厉害

执行用时 :20 ms, 在所有 cpp 提交中击败了45.59%的用户

内存消耗 :12.7 MB, 在所有 cpp 提交中击败了78.87%的用户

   stringconvert(strings, intnumRows) {

   if (numRows==1) returns;

   vector<string>rows(min(numRows, int(s.size()))); // 防止s的长度小于行数

   intcurRow=0;

   boolgoingDown=false;

   for (charc : s) {

       rows[curRow] +=c;

       if (curRow==0||curRow==numRows-1) {// 当前行curRow为0或numRows -1时,箭头发生反向转折

           goingDown=!goingDown;

       }

       curRow+=goingDown?1 : -1;

   }

   stringres;

   for (stringrow : rows) {// 从上到下遍历行

       res+=row;

   }

   returnres;

       

   }

第二版,时间稍微改进一点

执行用时 :16 ms, 在所有 cpp 提交中击败了65.56%的用户

内存消耗 :12.7 MB, 在所有 cpp 提交中击败了77.96%的用户

stringconvert(strings, intnumRows) {

   if (numRows==1) returns;

   vector<string>rows(min(numRows, int(s.size()))); // 防止s的长度小于行数

   intcurRow=0;

   boolgoingDown=false;

   for (char&c : s) {

       rows[curRow] +=c;

       if (curRow==0||curRow==numRows-1) {// 当前行curRow为0或numRows -1时,箭头发生反向转折

           goingDown=!goingDown;

       }

       curRow+=goingDown?1 : -1;

   }

   stringres;

   for (string&row : rows) {// 从上到下遍历行

       res+=row;

   }

   returnres;

}


目录
相关文章
|
人工智能 C# C++
Cool说丨力扣153、454
153. 寻找旋转排序数组中的最小值 454. 四数相加 II
100 1
|
C# C++
Cool说丨力扣287/792/378
关注博主,获取更多知识
83 0
|
C# C++ 索引
Cool说丨力扣162
162. 寻找峰值
62 0
|
存储 C# C++
Cool说丨力扣29/34
关注博主。获取更多知识
73 0
|
存储 C# C++
Cool说丨力扣392
392. 判断子序列
49 0
|
C# C++
Cool说丨力扣744、704
744. 寻找比目标字母大的最小字母 704. 二分查找
69 0
|
C#
Cool说丨力扣475
475. 供暖器
84 0
|
机器学习/深度学习 算法 C#
Cool说丨力扣202
202. 快乐数
77 0
|
C#
Cool说丨力扣167
167. 两数之和 II - 输入有序数组
46 0
|
C# C++
Cool说丨力扣374、441
441. 排列硬币 374. 猜数字大小
59 0