leetcode-7 字符串Z字(V字)输出
题目描述
Z字变换
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为
"LEETCODEISHIRING"
行数为 3 时,排列如下:1
2
3L C I R
E T O E S I I G
E D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:
"LCIRETOESIIGEDHN"
。示例 1:
1
2输入: s = "LEETCODEISHIRING", numRows = 3
输出: "LCIRETOESIIGEDHN"示例 2:
输入: s = “LEETCODEISHIRING”, numRows = 4
输出: “LDREOEIIECIHNTSG”
解释:1
2
3
4L D R
E O E I I
E C I H N
T S G说明
Z字转化其实就是交替输出字符,如下图所示:
解答
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26# -*- coding:utf-8 -*-
# @Time : 2020-08-29 13:29
# @Author : 宋晓奎
# @Email : austsxk@vip.qq.com
# @File : item_07Zconvert.py
# @Software : PyCharm
class Resolution(object):
def convert(self, s: str, row: int) -> str:
"""
将字符串转化为z字
:param s: 字符串
:param row: 行数
:return:
"""
if row <= 1:
return s
begin, flg = 0, -1
array = ['' for _ in range(len(s))]
for c in s:
array[begin] += c
if begin == 0 or begin == row - 1:
flg *= -1
begin += flg
return "".join(array)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33package main
import "strings"
/*
@Time : 2020/8/28 13:48
@Author : austsxk
@Email : austsxk@163.com
@File : day29_Zupdate.go
@Software: GoLand
*/
6. Z 字形变换
func convert(s string, numRows int) string {
if len(s) <= 1 {
return s
}
// 初始化控制的索引和控制的标志
begin, flag := 0, -1
// 将每一行的字符进行拼接,然后最后将数组拼接
array := make([]string, len(s))
for _, value := range []rune(s) {
array[begin] += string(value)
if begin == 0 || begin == numRows -1 {
// 如果是第一行和最后以后,在拼接完字符后,应该立马进行转化flag,反向操作
flag *= -1
}
// 通过flag的改变控制下次拼接字符的索引,即行数
begin += flag
}
// 将数据进行拼接后返回
data := strings.Join(array, "")
return data
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Erebus's Blog!
评论