• 刷题-力扣-6


    6. Z 字形变换

    题目链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/zigzag-conversion/
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    题目描述

    将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
    比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:

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

    之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。
    请你实现这个将字符串进行指定行数变换的函数:
    string convert(string s, int numRows);

    示例 1:

    输入:s = "PAYPALISHIRING", numRows = 3
    输出:"PAHNAPLSIIGYIR"
    

    示例 2:

    输入:s = "PAYPALISHIRING", numRows = 4
    输出:"PINALSIGYAHRPI"
    

    解释:

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

    示例 3:

    输入:s = "A", numRows = 1
    输出:"A"
    

    提示:

    • 1 <= s.length <= 1000
    • s 由英文字母(小写和大写)、',' 和 '.' 组成
    • 1 <= numRows <= 1000

    题目分析

    1. 对比字符串s和z字形,可以发现每一行相邻的两个元素之间存在关系。
    2. 在示例2中。第二行第一个元素“A”所在s中位置为1(从0算起),下一个元素的位置为:当前位置 + 2 * (行数 - 所处行数),再下一个元素位置为:当前位置 + 2 * (所处行号 - 1)
    3. 在2中每两次为一个循环。
    4. 循环截至条件为s中不存在下一个元素,则终止当前行的循环。开始下一行的循环。
    5. 当所有行循环完成,程序结束,所得字符串即为所求。

    代码

    class Solution {
    public:
        string convert(string s, int numRows) {
            if (numRows == 1) return s;
            int start = 2 * (numRows - 1);
            int end = 0;
            char str[1001];
            int strIndex = 0;
            int nowE = 0;
            for (int e = 0; e < numRows; e++) {
                nowE = e;
                while (true) {
                    if (nowE >= s.size()) { break; }
                    if (start > 0) {
                        str[strIndex] = s[nowE];
                        strIndex++;
                        nowE = nowE + start;
                    }
                    if (nowE >= s.size()) { break; }
                    if (end > 0) {
                        str[strIndex] = s[nowE];
                        strIndex++;
                        nowE = nowE + end;
                    }
                }
                start = start - 2;
                end = end + 2;
            }
            str[strIndex] = '';
            string strRes(str);
            return strRes;
        }
    };
    

    用时92min

  • 相关阅读:
    关于eclipse 的 web.xml文件 There is '1' error in 'j2ee_1_4.xsd'. 错误
    C#实现Java的AES加密解密算法
    jsp页面报错javax.servlet.jsp.jspException cannot be resolved to a type
    Ubuntu下查看jdk安装路径
    【Mysql】启动mysql报错mysqld_safe error: log-error set to /var/log/mariadb/mariadb.log
    spring mvc导出csv案例
    MyBatis 调用存储过程(详解)
    mysql 无限递归出现 data too long for column 'xxx' 错误
    java的maven项目头上有红叉解决方法
    Nexus3搭建Docker等私服
  • 原文地址:https://www.cnblogs.com/HanYG/p/14259482.html
Copyright © 2020-2023  润新知