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

2020-08-13 15:25:15 浏览数 (1)

原题描述

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

示例 1

代码语言:javascript复制
输入:"LEETCODEISHIRING" ,行数为 3 时
输出:"LCIRETOESIIGEDHN"
解释:
L   C   I   R
E T O E S I I G
E   D   H   N

示例 2

代码语言:javascript复制
输入: 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 参考代码

代码语言:javascript复制
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;
    }
};

0 人点赞