6. ZigZag Conversion_Swift

难度

中等

题目

给定字符串,返回对应的蛇形字符串,需要自己考虑首位行边界情况。时间复杂度为: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
}

你可能感兴趣的:(6. ZigZag Conversion_Swift)