题目描述
给你一个字符串s和行数numRows,把s字符串按照z字形重新排列。
再从左往右进行读取,返回读取之后的字符串。
本题是找规律,但是没有找出来
解题思路
要想解出来该题,在进行z字变换的时候,我们把字符串的下标进行进行变换,容易找出规律。
规律如下:
代码
class Solution {
public:string convert(string s, int numRows) {//为1时特判if(numRows==1) return s;string ret;int d=2*numRows-2;for(int i=0;i<numRows;i++){//start2初始为最大,为了在第0和第numRows-1行时,可以跳出循环int start1=i,start2=INT_MAX;if(i!=0&&i!=numRows-1) start2=d-i;while(start1<s.size()||start2<s.size()){if(start1<s.size()) ret+=s[start1],start1+=d;if(i!=0&&i!=numRows-1&&start2<s.size()) ret+=s[start2],start2+=d;}}return ret;}
};