
第一行:行0中的字符位于索引2*(numRows-1)处;
最后一行:行numRows−1中的字符位于索引2(numRows−1)k+numRows−1处;
内部的行:行i中的字符位于索引2(numRows−1)k-i以及2(numRows−1)k+numRows+1处;
将每个向下以及向右上的部分看作一个循环。
对于示例2,循环1:LEET CO;循环2:DEIS HI;循环3:RING
string convert(string s, int numRows) {
if(numRows==1) return s;
int n = s.size();
int cyc = 2*(numRows-1);
string res;
//i表示行号
for(int i=0;i<numRows;++i){
//j表示每个循环的开始序号
for(int j=0;j+i<n;j+=cyc){
//此处加的是每个循环向下的部分
res += s[j+i];
//不是第一行,不是最后一行,索引在n的范围内,则该行还有向右上的部分
if(i!=0 && i!=numRows-1 && j+cyc-i<n)
res += s[j+cyc-i];
}
}
return res;
}
本文深入探讨了Z形字符串打印算法,详细解释了如何通过特定的行索引规律实现字符串的Z形转换。关键在于理解不同行字符的索引位置,以及如何利用循环和条件判断来构建最终的Z形字符串。
1122

被折叠的 条评论
为什么被折叠?



