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

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


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

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


问题描述

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

比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:
Leecode06. Z 字形变换——Leecode大厂热题100道系列
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“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;
    }
};

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

上一篇:LeetCode 6. Z 字形变换


下一篇:Leetcode - 6. Z 字形变换