leetcode6. Z 字形变换

题目:

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

比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:
L C I R
E T O E S I I G
E D H N
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:”LCIRETOESIIGEDHN”。

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:

输入: s = “LEETCODEISHIRING”, numRows = 3 输出: “LCIRETOESIIGEDHN”
示例 2:

输入: s = “LEETCODEISHIRING”, numRows = 4 输出: “LDREOEIIECIHNTSG” 解释:
L D R
E O E I I
E C I H N
T S G
(解释中的显示不太正确,以原题为准)
题目原链接

解题思路:
首先,要看懂题目,Z字形在此题目中是竖直的,类似N字形。
然后,不难看出来N的2竖的元素在字符串的规律,s.chat(i)对应的就是s.chat(i + 2 numRows - 2),所 大专栏  leetcode6. Z 字形变换以每一行对应的竖直元素很显然可以得到;从第二行开始,斜着的元素稍加观察可以看出是由对应竖直元素减去当前行i2得来的,所以创建一个StringBuilder每次添加一整行的元素即可。

代码如下:

class Solution {
    public String convert(String s, int numRows) {
        if(numRows == 1) return s;
        int n = 2 * numRows - 2;
        StringBuilder res = new StringBuilder();
        for(int i = 0; i < numRows; i ++) {
            for(int j = i; j < s.length(); j += n) {
                res.append(s.charAt(j));
                //第一行和最后一行没有斜着的元素
                if(i != 0 && i != numRows-1) {
                    //对应行斜着的元素的下标
                    int temp = j + n - 2*i;
                    if(temp > 0 && temp < s.length())
                        res.append(s.charAt(j+n-2*i));
                }
            }
        }
        return res.toString();
    }
}

代码提交结果:
成功
显示详情
执行用时 : 9 ms, 在ZigZag Conversion的Java提交中击败了99.18% 的用户
内存消耗 : 37.9 MB, 在ZigZag Conversion的Java提交中击败了97.81% 的用户

原文地址:https://www.cnblogs.com/liuzhongrong/p/12262872.html

时间: 2024-08-30 16:46:29

leetcode6. Z 字形变换的相关文章

Z 字形变换 C++实现 java实现 leetcode系列(六)

Z 字形变换  java实现 C++实现  将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN". 请你实现这个将字符串进行指定行数变换的函数: string convert(string s, in

[LeetCode] Z字形变换

Z字形变换 题目描述 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN". 请你实现这个将字符串进行指定行数变换的函数: string convert(string s, int numRows);

Z字形变换

将字符串 "PAYPALISHIRING" 以 Z 字形排列成给定的行数: 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

[LeetCode] 6. Z 字形变换

题目链接:(https://leetcode-cn.com/problems/zigzag-conversion/) 题目描述: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN". 请你实现这个将

6——Z 字形变换(ZigZag Conversion)

题目描述将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下: L C I RE T O E S I I GE D H N123之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”. 请你实现这个将字符串进行指定行数变换的函数: string convert(string s, int numRows);1示例1输入: s = "LEETCODEI

6. Z 字形变换

将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN". 请你实现这个将字符串进行指定行数变换的函数: string convert(string s, int numRows);示例 1: 输入: s =

Z 字形变换

将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN". 请你实现这个将字符串进行指定行数变换的函数: string convert(string s, int numRows); 示例 1: 输入:

leetcode 6 Z字形变换

将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN". 请你实现这个将字符串进行指定行数变换的函数: string convert(string s, int numRows);示例 1: 输入: s = "LEETCODEISHIRING",

PHP算法之Z 字形变换

将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN". 请你实现这个将字符串进行指定行数变换的函数: string convert(string s, int numRows);示例 1: 输入: s =