Z字形变换
题目描述:
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:
L C I R
E T O E S I I G
E D H N
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。
class Solution {
public:
string convert(string s, int numRows) {
char str[numRows][s.length()];
memset(str,0,sizeof(str));
int count[numRows];
memset(count,0,sizeof(count));
int time = 0;
for(int i = 0 ; i<s.length() ;){
if(time == 0){ // 从上往下开始
while(time < numRows && i < s.length() ){
str[time][count[time]++] = s[i];
time ++ ;
i++; // 这里的i也需要变化
}
}else if(time == numRows){ // 从下往上开始
time -= 2; // 从倒数第二个开始
while(time > 0 && i < s.length() ){
str[time][count[time]++] = s[i];
time--;
i++; // 这里的i也需要变化
}
if(time < 0) time ++; // 特殊判断numRows为1的情况
}
}
string result = "";
for(int i = 0 ;i<numRows ; i++){
for(int j = 0 ; j<s.length() ; j++){
if(int(str[i][j])){
result += str[i][j];
}
}
}
return result;
}
};
首先按照从上往下依次放入数组中,然后再次从下往上放入。利用一个numRows行的数组记录二维数组的最后位置。