我是靠谱客的博主 大胆黄豆,最近开发中收集的这篇文章主要介绍[Leetcode]Z字形变换,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

[Leetcode]Z字形变换

Leetcode-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
解题思路
  • 字符串 s 按照给定行数 nunRows 进行 Z 字形排列,容易发现,遍历 s 时每个字符在 Z 字形中的 行索引 ,先从 0 增大到 numRows-1 ,再从 numRows-1 减小到 0,如此反复。
  • 定义 numsRows 个数组,分别记录每一行的字符,最后的结果就是这 numsRows 个数组的组合。
实现代码
class Solution {
public:
string convert(string s, int numRows) {
int len=s.length();
string ans;
if(len<1)return ans;
if(numRows<2)return s;
vector<string>res(numRows);
int row=0;
int flag=-1;
for(int i=0;i<len;i++){
res[row]+=s[i];
if(row==0||row==numRows-1) //到达Z字形转折点时反向
flag=-flag;
row+=flag;
}
for(int i=0;i<numRows;i++)
ans+=res[i];
return ans;
}
};

最后

以上就是大胆黄豆为你收集整理的[Leetcode]Z字形变换的全部内容,希望文章能够帮你解决[Leetcode]Z字形变换所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部