• LeetCode 6


    一、问题描述

    Description:

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

    P   A   H   N
    A P L S I I G
    Y   I   R

    And then read line by line: "PAHNAPLSIIGYIR"

    Write the code that will take a string and make this conversion given a number of rows:

    string convert(string text, int nRows);

    convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".

    根据给出的行数,按 “之” 字形排列源字符串,然后一行一行地输出字符串。


    二、解题报告

    本题主要是理解题意,输入一个字符串和一个行数,按“之”字形排列该字符串的字符,如下图:



    这是 3 行的之字形,如果是 4 行的话:



    以此类推。

    思路:根据上面分析的规律,我们只需定义一个字符串数组,大小为行数(即每一行对应一个字符串)。然后遍历输入字符串,将每个字符插入对应行的字符串即可。

    class Solution {
    public:
        string convert(string s, int numRows) {
            if(numRows == 1)
                return s;
    
            vector<string> v(numRows,"");  // 创建numRows个字符串
            int idx = 0;
            bool flag = true;
            for(int i=0; i<s.size(); ++i)
            {
                v[idx] += s[i];
    
                if(flag)
                    ++idx;
                else
                    --idx;
    
                if(idx == numRows-1)
                    flag = false;
                if(idx == 0)
                    flag = true;
            }
    
            // 输出
            string output = "";
            for(int i=0; i<numRows; ++i)
                output += v[i];
            return output;
        }
    };





    LeetCode答案源代码:https://github.com/SongLee24/LeetCode


  • 相关阅读:
    laravel路由和MVC
    laravel目录介绍
    laravel下载安装
    Mac 程序员的十种武器
    Python中列表的copy方法
    Ubuntu 安装vim失败解决
    Linux userAdd 增加用户如果没有配置文件情况解决
    Ubuntu 软件管理
    awk工具详解
    httpsClient
  • 原文地址:https://www.cnblogs.com/songlee/p/5738063.html
Copyright © 2020-2023  润新知