我是小张同学,立志用最简洁的代码做最高效的表达
以下是我个人做的题解,每个题都尽量囊括了所有解法,并做到了最优解,欢迎大家收藏!留言!
传送门——>Leecode大厂热题100道系列题解
问题描述
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。
请你实现这个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
示例 1:
输入:s = “PAYPALISHIRING”, numRows = 3
输出:“PAHNAPLSIIGYIR”
示例 2:
输入:s = “PAYPALISHIRING”, numRows = 4
输出:“PINALSIGYAHRPI”
示例 3:
输入:s = “A”, numRows = 1
输出:“A”
核心思路
找规律,优化
代码
class Solution {
public:
int min(int a, int b) {
return a > b ? a : b;
}
string convert(string s, int numRows) {
string ss[min(numRows, s.length())]; // 取二者中的最小值
bool flag = false;
int nowRow = 0, i = 0; // 当前行
while (i != s.length()) {
ss[nowRow] += s[i++];
if (nowRow == 0 || nowRow == numRows - 1) flag = !flag;
flag ? nowRow++ : nowRow--;
}
string res;
for(auto temp : ss) {
res += temp;
}
return res;
}
};