Swift 每週五題 LeetCode(8)
Published in
6 min readMar 20, 2022
嗨嗨~我是這週五發覺到自己是帝寶的孩子(上帝的寶貝簡稱)XD哈哈有聽偷聽史多利的朋友應該會知道😎由於這個週末要到公司加班(ing)所以週五先休了一天假,剛好那天早上我家附近的工業區發生火災大塞車@@讓我逃過遲到保住出勤獎金:D
正題開始!
54. Spiral Matrix(Medium)
老實說這題我逃避了一天:P在想到底怎麼處裡好,最後還是決定給方向直接指示行動位置
func spiralOrder(_ matrix: [[Int]]) -> [Int] {
var result = [Int]()
var top = 0
var left = 0
var bottom = matrix.count - 1
var right = matrix[0].count - 1
var direction = 0
while top <= bottom && left <= right {
if direction % 4 == 0 {
for i in left...right {
result.append(matrix[top][i])
}
top += 1
}
if direction % 4 == 1 {
for i in top...bottom {
result.append(matrix[i][right])
}
right -= 1
}
if direction % 4 == 2 {
for i in stride(from: right, through: left, by: -1) {
result.append(matrix[bottom][i])
}
bottom -= 1
}
if direction % 4 == 3 {
for i in stride(from: bottom, through: top, by: -1) {
result.append(matrix[i][left])
}
left += 1
}
direction += 1
}
return result
}
55. Jump Game(Medium)
這題也花了一點時間理解題目,最初位於陣列的第一個index,數組中的每個元素都代表在該位置的最大跳躍長度,如果可以到達最後一個返回 true,否則返回 false。
https://leetcode.com/problems/jump-game/
func canJump(_ nums: [Int]) -> Bool {
var jump = 0
var i = 0
while i <= jump {
jump = max(jump, i + nums[i])
i += 1
if jump >= nums.count - 1 {
return true
}
}
return false
}
56. Merge Intervals(Medium)
題目中[[1, 3][2, 6]],從1到6中間會有2, 3, 4, 5合併所有重疊區間,並返回一個包含輸入中所有區間的”非重疊”區間數組,所以最後輸出會是[1, 6]。
func merge(_ intervals: [[Int]]) -> [[Int]] {
var result: [[Int]] = []
var arr = intervals.sorted { left, right in
left[0] < right[0]
}
var now = arr[0] //當下的位置
for i in 1..<arr.count { //從[0]開始所以回圈從第一個位置開始檢查
if now[1] >= arr[i][0] { //若陣列中[1]比前者大
now = [now[0],max(now[1], arr[i][1])] //now=當下或是較大的
} else {
result.append(now)
now = arr[i]
}
}
result.append(now)
return result
}
62. Unique Paths(Medium)
這幾題都是這種棋盤類型的題目QQ
https://www.youtube.com/watch?v=zQ6lx5tZ1Xw
請直接看影片解說比較清楚,再附上Swift解法
https://leetcode.com/problems/unique-paths/
func uniquePaths(_ m: Int, _ n: Int) -> Int {
var result = Array(repeating: 1, count: n)
for i in 1..<m {
for k in 1..<n {
result[k] = result[k] + result[k-1]
}
}
return result[n-1]
}
66. Plus One(Easy)
簡單來說就是將整數加一併返回結果數字陣列。
https://leetcode.com/problems/plus-one/
func plusOne(_ digits: [Int]) -> [Int] {
var carry: Int = 1
var result = digits
for i in stride(from: digits.count - 1, to: -1, by: -1) {
let value = (digits[i] + carry) % 10
carry = (digits[i] + carry) / 10
result[i] = value
}
if carry == 1 {
result.insert(1, at: 0)
}
return result
}