题目描述


思路解析
看到这道题其实一开始我是一脸懵的
后面才慢慢清楚思路
-
没有用数组以及其他工具,依次找到第一行、第2行…第n行所取S中的字符,存入ans中,返回ans即可。
-
找到下标分布的规律:
-
第一行和最后一行取出字符串S的下标间隔为(numRows*2-2),因为中间有(numRows-1)行,而每行中有2个数字;
-
中间的每一行间隔有下三角部分和上三角部分,间隔分别为(numRows-row-1) * 2、row * 2;
题解
class Solution {
public:
string convert(string s, int numRows) {
int length=s.length();
if(numRows>=length||numRows<2) return s;
string ans;
for( int row=0;row<numRows;row++){
int i=row;
if(row==0||row==numRows-1){
while(i<length){
ans+=s[i];
i+=numRows*2-2;
}
}
else{
while(i<length){
ans+=s[i];
i+=(numRows-row-1)*2;
if(i<length){
ans+=s[i];
i+=row*2;
}
}
}
}
return ans;
}
};
提交结果

本文详细解析了一种特殊的字符串转换算法,即将给定的字符串以Z形方式打印在多行上的问题。通过分析,作者提供了清晰的思路和C++实现代码,重点介绍了如何根据指定的行数确定字符在字符串中的位置,以及如何利用特定的数学规律进行高效计算。
736

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



