LeetCode系列之【6.Z字形变换】C++ 经验总结

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地址。感谢感谢!!

返回该

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值