学习(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的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode - #204 计数质数

Swift 语言指南--来自github学习

LeetCode - #205 同构字符串

LeetCode - #216 组合总和 III

LeetCode - #203 移除链表元素

Swift 2.0学习笔记(Day 6)——哎呀常量和变量都该什么时候用啊?