难度
中等
题目
给定字符串,返回对应的蛇形字符串,需要自己考虑首位行边界情况。时间复杂度为:O(n)。
Example 如下:
"PAYPALISHIRING"
-------------------
P A H N
A P L S I I G
Y I R
-------------------
"PAHNAPLSIIGYIR"
思路
思路一
用 stride
函数用来处理 for step
的情况。
代码
方法一
func convert(_ s: String, _ numRows: Int) -> String {
guard numRows >= 2 else {
return s
}
let chars = [Character](s)
// 每组数字的个数
let loop = numRows + (numRows - 2)
var result = ""
for rowIndex in 0 ..< numRows {
var row = ""
// stride 函数为根据条件分组
let strideNums = stride(from:rowIndex, to:chars.count, by: loop)
for num in strideNums {
row.append(chars[num])
// 如果不是收尾行,则需要添加后位数字
if rowIndex > 0 && rowIndex < numRows - 1 {
let next = num + (numRows - rowIndex - 1) * 2
if next < chars.count {
row.append(chars[next])
}
}
}
result.append(row)
}
return result
}
网友评论