找找规律——LeetCode题目6:Z字形变换

时间:2022-07-23
本文章向大家介绍找找规律——LeetCode题目6:Z字形变换,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

原题描述

+

将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z字形排列,然后输出。(此处需要示例解释一下)

示例 1

输入:"LEETCODEISHIRING" ,行数为 3 时
输出:"LCIRETOESIIGEDHN"
解释:
L   C   I   R
E T O E S I I G
E   D   H   N

示例 2

输入: s = "LEETCODEISHIRING", numRows = 4
输出: "LDREOEIIECIHNTSG"
解释:
L     D     R
E   O E   I I
E C   I H   N
T     S     G

你能看出Z字形了吗?那么现在请你实现这个转换后输出的函数吧!

原题链接:https://leetcode-cn.com/problems/zigzag-conversion

思路解析

+

可别被题目吓到了,这题的规律还挺容易找到的,我认为是一道简单题,只是你需要踏实下来在纸上打打草稿,并且认真的处理边界情况。我把按照Z字形放置时,所有行的index总结了出来,我们只需要开启row层循环,依次按照下面的index取数据即可。

复杂度分析

+

  • 时间复杂度:
  • 空间复杂度:

C++参考代码

+

class Solution {
public:
    string convert(string s, int numRows) {
        if (numRows == 1) return s;
        string res;
        int stride = 2 * (numRows - 1);
        for (int i = 0; i < numRows; ++i) {
            for (int k = 0; i + k < s.size(); k += stride) {
                res += s[i + k];
                if (i > 0 && i < numRows - 1 && k + stride - i < s.size()) {
                    res += s[k + stride - i];
                }
            }
        }
        return res;
    }
};