学习(Swift)Leetcode 6. ZigZag Conversion
Posted 小冰溜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习(Swift)Leetcode 6. ZigZag Conversion相关的知识,希望对你有一定的参考价值。
题目:
https://leetcode.com/problems/zigzag-conversion/
The string "PAYPALISHIRING"
is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
P A H N
A P L S I I G
Y I R
And then read line by line: "PAHNAPLSIIGYIR"
Write the code that will take a string and make this conversion given a number of rows:
string convert(string s, int numRows);
Example 1:
Input: s = "PAYPALISHIRING", numRows = 3
Output: "PAHNAPLSIIGYIR"
Example 2:
Input: s = "PAYPALISHIRING", numRows = 4
Output: "PINALSIGYAHRPI"
Explanation:
P I N
A L S I G
Y A H R
P I
分析:
这是一个关于String/模拟的Medium难度题
模拟题我感觉比较容易想解题思路,就是暴力着来就行。最直接的想法是简单粗暴,直接有几个row就创建几个数组,然后把对应的字母放到相应的数组中,最后一个数组一个数组的遍历,生成最后的结果。
[本题实际的解法]模拟题也可以把具体过程画出来,然后看看有没有什么规律可循,没准这个规律很简单,这样写代码写起来也会很简单,出现bug的风险也会降低
具体思路图:
代码:
class Solution {
func convert(_ s: String, _ numRows: Int) -> String {
if numRows == 1 {
return s
}
let maxInterval = 2 * (numRows - 1)
var chars = [Character]()
for index in 0 ..< numRows {
var loops = 0
while index + maxInterval * loops < s.count {
let tempIndex1 = index + maxInterval * loops
chars.append(Array(s)[tempIndex1])
if index == 0 || index == numRows - 1 {
loops += 1
continue
}
let tempIndex2 = index + maxInterval * loops + maxInterval - (index * 2)
if tempIndex2 < s.count {
chars.append(Array(s)[tempIndex2])
}
loops += 1
}
}
return String(chars)
}
}
学到:
模拟题最主要是整理清晰流程,最好在白板上画一下,这样让面试官也比较清晰。
模拟题主要是考察编程能力,需要注意各种edge case,写完之后提出一些test case
以上是关于学习(Swift)Leetcode 6. ZigZag Conversion的主要内容,如果未能解决你的问题,请参考以下文章