Leecode06. Z 字形变换——Leecode大厂热题100道系列

Posted 来老铁干了这碗代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leecode06. Z 字形变换——Leecode大厂热题100道系列相关的知识,希望对你有一定的参考价值。

我是小张同学,立志用最简洁的代码做最高效的表达


以下是我个人做的题解,每个题都尽量囊括了所有解法,并做到了最优解,欢迎大家收藏!留言!

传送门——>Leecode大厂热题100道系列题解


问题描述

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。
请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:
输入:s = “PAYPALISHIRING”, numRows = 3
输出:“PAHNAPLSIIGYIR”

示例 2:
输入:s = “PAYPALISHIRING”, numRows = 4
输出:“PINALSIGYAHRPI”

示例 3:
输入:s = “A”, numRows = 1
输出:“A”


核心思路

找规律,优化


代码

class Solution {
public:
    int min(int a, int b) {
        return a > b ? a : b;
    }
    string convert(string s, int numRows) {
        string ss[min(numRows, s.length())];        // 取二者中的最小值
        bool flag = false;
        int nowRow = 0, i = 0;         // 当前行
        while (i != s.length()) {
            ss[nowRow] += s[i++];
            if (nowRow == 0 || nowRow == numRows - 1) flag = !flag;
            flag ? nowRow++ : nowRow--;
        }
        string res;
        for(auto temp : ss) {
            res += temp;
        }
        return res;
    }
};

当你觉得自己很聪明,所有人都开始夸赞你时,其实你只是在收割你以前的积累而已。

以上是关于Leecode06. Z 字形变换——Leecode大厂热题100道系列的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode] Z字形变换

Z字形变换

Z字形变换

LeetCode-006-Z 字形变换

leetcode算法:6.Z 字形变换

Z字形变换