LeetCode Golang 6. Z 字形变换
6. 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
解法:
思路: 等差数列, 控制循环变量达到预期效果, 画两张图就能弄出来
参考网址:https://blog.csdn.net/qq_33022911/article/details/83616833
func convert(s string, numRows int) string {
if numRows <= 1 || len(s) == 0 {
return s
}
rst := ""
size := 2*numRows - 2
for i := 0; i < numRows; i++ {
for j := i; j < len(s); j += size {
rst += string(s[j])
tmp := j + size - 2*i
if i != 0 && i != numRows-1 && tmp < len(s) {
rst += string(s[tmp])
}
}
}
return rst
}
大神解法中 8ms 完成用例没有看懂, 好像是用指针完成的; 贴出来12ms的:
这里大神用了一个特性: go语言中的string中, 每个字符是可以用 uint8 来直接表示出来的, 这样就省去了切单个字符 s[j] 时候的强制转换
原因: go语言官方别名:
byte -> uint8
rune -> int32
运行结果:
LDREOEIIECIHNTSG
uint8
func convert(s string, numRows int) string {
if numRows == 1 {
return s
}
var cs []uint8
var count int
var index int
for i := 0; i < numRows; i++{
count = 0
index = count*(2*numRows-2) + i
for index < len(s){
cs = append(cs, s[index])
if i != 0 && i != numRows - 1 {
index = (count + 1) * (2 * numRows - 2) - i
if index >= len(s) {
break
}
cs = append(cs, s[index])
}
count++
index = count*(2*numRows-2) + i
}
}
return string(cs)
}
LeetCode Golang 6. Z 字形变换的更多相关文章
- 【LeetCode】6. Z 字形变换
题目 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C ...
- 【LeetCode 6】Z 字形变换
题目链接 [题解] 还想着模拟这个过程.然后发现只有行有用啊!... 那就建个rows大小的字符串数组存每行从左到右的字符就行啦.. 然后就是i从1变到n然后又变回1反复就好了. 最后把1..rows ...
- C#版[击败100.00%的提交] - Leetcode 6. Z字形变换 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- Leetcode(6)Z字形变换
Leetcode(6)Z字形变换 [题目表述]: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" ...
- Java实现 LeetCode 6 Z字形变换
6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...
- Leetcode题库——6.Z字形变换
@author: ZZQ @software: PyCharm @file: convert.py @time: 2018/9/20 20:12 要求: Z字形变换 将字符串 "PAYPAL ...
- Z 字形变换 C++实现 java实现 leetcode系列(六)
Z 字形变换 java实现 C++实现 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 ...
- 【LeetCode】ZigZag Conversion(Z 字形变换)
这道题是LeetCode里的第6道题. 题目要求: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" ...
- leetcode刷题六<z字形变换>
将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐 ...
随机推荐
- Python3与2的故事一
print函数:(Python3中print为一个函数,必须用括号括起来:Python2中print为class) Python 2 的 print 声明已经被 print() 函数取代了,这意味着我 ...
- vc++如何创建程序--利用快捷键进行多行注释
Eclipse同时注释多行①:ctrl+/或 ②:ctrl+shift+/ : Visual studio先按ctrl+k 再按 ctrl+c 2.在VC++6.0中需要自己设置快捷键,设置方法链接如 ...
- 阿里云API网关!
API 网关(API Gateway)提供高性能.高可用的 API 托管服务,帮助用户对外开放其部署在 ECS.容器服务等阿里云产品上的应用,提供完整的 API 发布.管理.维护生命周期管理.用户只需 ...
- C#学习 第九节
构造器 1.构造器(constructor)是类型的成员之一: 2.狭义的构造器是指“实例构造器”(instance constructor): 3.构造器的调用 student stu =new s ...
- CentOS 笔记(二) 端口占用,进程查看
①查看当前端口情况 netstat -nultp ②查看当前进程情况 ps -ef ps -ef|grep dotnet ③强制kill 进程 kill -9 [PIN]
- 基于vue的可视化编辑器
https://github.com/jaweii/Vue-Layout https://github.com/L-Chris/vue-design https://github.com/fir ...
- Python - 采用 contextmanage 简化代码
contextlib.contextmanage Python 2.7 documents: https://docs.python.org/2.7/library/contextlib.html?h ...
- JavaScript 事件对内存和性能的影响
程序代码: <%-- Created by IntelliJ IDEA. User: 乔克叔叔 Date: 2017/12/26 Time: 16:45 To change this templ ...
- switch 的穿透, 以及穿透利用
switch 穿透测试: outputs: 添加break 阻止switch穿透: outputs: 利用switch的穿透功能:
- ASP.NET CORE--WIN10上无法单步调试解决方法
参考这篇文章 http://www.cnblogs.com/artech/p/debug-in-vs-code.html In order to be able to debug cross-plat ...
