Swift 每週五題 LeetCode(9)

LULU
彼得潘的 Swift iOS App 開發教室
6 min readMar 29, 2022

--

嗨嗨~各位~最近深深有感體力追不上年紀QQ即使每週運動2–3天,在經過兩天假日10小時的課程,還是得在週一休假放過自己><

正題開始~~

69. Sqrt(x) (Easy)

這是一題開根號的題目~
因為只需要return 整數所以我用了最~~簡單的方法XD

func mySqrt(_ x: Int) -> Int {
// return Int(sqrt(Double(x))) 也可以直接call function
var result = 0
var i = 1
while i*i <= x {
result = i
i += 1
}
return result
}

70. Climbing Stairs (Easy)

每一次可以走一步或是兩步,計算最後有幾種方式可以到達終點
https://leetcode.com/problems/climbing-stairs/

func climbStairs(_ n: Int) -> Int {
var step = [0, 1 , 1]
for i in 1...n + 1 {
if i <= 2 {
continue
}
step.append(step[i - 1] + step[i - 2])
}
return step.last!
}

73. Set Matrix Zeroes (Medium)

這裡需要把”原本”數字是0的位置的上下左右都改成0

Example :

Input: matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
Output: [[0,0,0,0],[0,4,5,0],[0,3,1,0]]

原本是0的位置只有[0, 0] [3, 0]的位置,所以從此位置望上,下,左,右的位置的數字都改成0,[0,1,2,0] →[0,0,0,0]

func setZeroes(_ matrix: inout [[Int]]) {
let m = matrix.count
let n = matrix[0].count
var rows = [Int]()
var cols = [Int]()

for i in 0..<m {
for k in 0..<n{
if matrix[i][k] == 0 {
rows.append(i)
cols.append(k)
}
}
}

for col in cols {
for i in 0..<m {
matrix[i][col] = 0
}
}
for row in rows {
for k in 0..<n {
matrix[row][k] = 0
}
}
}

75. Sort Colors (Medium)

這題最大的重點就是不能直接用sort function,直接上解答

func sortColors(_ nums: inout [Int]) {
var min = 0
var max = nums.count - 1
var i = 0

while i <= max {
if nums[i] == 0 {
nums.swapAt(i, min)
min += 1
i += 1
} else if nums[i] == 1 {
i += 1
} else if i <= max && nums[i] == 2 {
nums.swapAt(i, max)
max -= 1
}
}
}
var color = [0, 1, 0]

76. Minimum Window Substring (Hard)

這題真的好難QQ直接看答案然後想辦法裡解

func minWindow(_ s: String, _ t: String) -> String {

guard s.count >= t.count else {
return ""
}

let sStr = Array(s)
let tStr = Array(t)

var tCurr = [Character:Int]()
for i in 0..<tStr.count {
let letter = tStr[i]
tCurr[letter, default: 0] += 1
}

var charsInWindow = 0
var minStr = ""
var minLen = Int.max
var start = 0
for end in 0..<sStr.count {
let letter = sStr[end]
if tCurr[letter] != nil {
if tCurr[letter]! > 0 {
charsInWindow += 1
}
tCurr[letter]! -= 1
}
while start<sStr.count &&
(tCurr[sStr[start]] == nil ||
(tCurr[sStr[start]] != nil && tCurr[sStr[start]]! < 0)) {
if tCurr[sStr[start]] != nil {
tCurr[sStr[start]]! += 1
}
start += 1
}

if charsInWindow == tStr.count {
if end-start+1 < minLen {
minLen = end-start+1
minStr = String(sStr[start...end])
}
}
}
return minStr
}

--

--

LULU
彼得潘的 Swift iOS App 開發教室

Hi👋 I’m iOS developer, I hope I can grow with you guys ☺️ Let’s learn more together.