LeetCode系列之【6.Z字形变换】C++ 经验总结
我是代码小白一个,但是本科传统机械专业,研究生是车联网,需要学习C++,但是也需要转行,所以学习完基础开始刷题力扣,
很多不懂的地方也是站在前辈的肩上学习,先自己思考编写在VS上,然后实现不了再看别人的文章,可能别人没法注解全部的语句,那我为大家解惑就
一个个进行注解方便阅读,可能有些人读不懂我写的,欢迎留言。
class Solution {
public:
string convert(string s, int numRows) {
if(numRows==1) //判断numRows若为0 则代表就一行 就一个字符即返回
{
return s; //如果一个字符就即返回值
}
int gap=2*(numRows-1); //初始gap 为了算第一行所有字符 做准备 这种算法思路是先单独组合一行
string out; //作为整个多行结果的储存
int i=0;
for(int i=0;i<numRows;++i) //i是作为行进行循环 numRows为实际行数,而i是作为单个行标
{
string tmp=" "; //作为单个行的整合的暂存器
int j =i;//用j表示小行
while(j<s.size()) //循环单个小行里面的所有存在的元素 这是根据数学规律寻找的
{
tmp+=s[j]; //叠加第一次的第一行元素//
int middle=j+2*(numRows-i-1); //计算第一行第二个元素出现的位置
if(i!=0 && i!=(numRows-1) && middle<s.size()) //判断间隔值middle不在第一行和最后一行
{
tmp+=s[middle];//若叠加条件 则该行加上该第一个gap周期里面该行的第二个元素
//middle值其在第一行便是第二个周期gap的开头,最后一行只有单个元素
}
j+=gap; //开始第一行的累加 注意是加gap不是middle
}
out += tmp; //单独一行所有结果的叠加输出
}
return out;//在i行全部循环后的所有单独一行的叠加结果输出
}
};
原文章代码的输入会有错,就是会出现空格_ 导致结果不对,其他字母顺序都是正确的,需要调整的是在for循环里面对string tmp的初始化不要写空格就好,直接给定义string tmp;
原文章的大佬:https://www.bilibili.com/video/BV1M4411q72Z?from=search&seid=459008176153376787 里面也有其CSDN地址。感谢感谢!!