Leetcode刷题笔记题解(C++):6. Z 字形变换

Leetcode刷题笔记题解(C++):6. Z 字形变换_第1张图片

思路:根据每个字符的下标来确定它在哪一行,然后生产新的字符串即可

代码如下:

class Solution {
public:
    string convert(string s, int numRows) {
        int size=s.length();
        //行数取定义行数,如果字符串的长度小于行数的话则取字符串长度
        numRows=min(numRows,size);
        //如果字符串的长度为1或者行数为1时,直接输出原字符串
        if(numRows==1||size==1) return s;
        //m保存Z字重复一块有多少个字符,比如3行的话就有6个字符
        int m=numRows*2-2;
        //用来保存每行的字符
        vector>res(numRows);
        for(int i=0;i=numRows){j=m-j;}
            res[j].push_back(s[i]);
        }
        //输出字符串
        string out;
        for(int i=0;i

思路二:按照思路走,

利用变量flag来指定往上走还是往下走

flag=1的意思往下走,当走到第一行的时候需要往下走

flag=-1的意思往上走,当走到最后一行的时候需要往上走

代码如下:

class Solution {
public:
    string convert(string s, int numRows) {
        int size=s.length();
        //行数取定义行数,如果字符串的长度小于行数的话则取字符串长度
        numRows=min(numRows,size);
        //如果字符串的长度为1或者行数为1时,直接输出原字符串
        if(numRows==1||size==1) return s;
        //用来保存每行的字符串
        vectorres(numRows);
        //i来标记下标,flag来标记往下走还是往上走,初始为-1是从下往上改为从上往下走
        int i=0,flag=-1;
        for(char c:s){
            res[i]+=c;
            //当走到第一行或者最后一行需要进行变向
            if(i==0||i==numRows-1) flag=-flag;
            //每次走一步
            i+=flag;
        }
        //输出字符串
        string out;
        for(int i=0;i

 

你可能感兴趣的:(Leetcode算法题解,字符串,c++,leetcode,算法)