题目
思路
模拟
代码
class Solution {
func convert(s: String, numRows: Int64): String {
let len = s.size
if(len <= numRows || numRows == 1)
{
return s;
}
var sArr = s.toRuneArray()
var strArr = Array<Rune>(len, item:r'a')
var sIndex = 0
var strIndex = 0
while(sIndex < len){
strArr[strIndex] = sArr[sIndex]
sIndex += 2*numRows-2
strIndex++
}
for(i in 1..numRows-1){
sIndex = i
while(sIndex < len && strIndex < len){
strArr[strIndex] = sArr[sIndex]
sIndex += 2*numRows-2-2*i
strIndex++
if(sIndex>=len){
break
}
strArr[strIndex] = sArr[sIndex]
sIndex += 2*i
strIndex++
}
}
sIndex = numRows -1
while(sIndex < len && strIndex < len){
strArr[strIndex] = sArr[sIndex]
sIndex += 2*numRows-2
strIndex++
}
return String(strArr)
}
}
复杂度
时间复杂度
O(n)
,每个字符只遍历一次
空间复杂度
O(n)
开了个toRuneArray的数组
遇到的坑
1、仓颉类型强制赋值会报错,如果不想每个赋值都Rune()
的话只能开空间
2、数组初始化的时候,一开始还以为直接可以
var strArr = Array<Rune>(len, r'a')
但是这样会被识别成
结果没想到真的是要写item:r'a'
var strArr = Array<Rune>(len, item:r'a')