給予一個只含有 9 和 6 的正數,在只可以替換一位數的限制下,回傳一個最大值。
num = 9669
需要回傳
9969
轉換成陣列,替換掉第一個出現的 6 後回傳。
class Solution {
func maximum69Number (_ num: Int) -> Int {
var string = Array(String(num))
for index in 0..<string.count {
if string[index] == "6" {
string[index] = "9"
break
}
}
return Int(String(string))!
}
}
令 num 的位數為 n
Big O | 說明 | |
---|---|---|
時間複雜度 | O(n) | 線性走訪 |
空間複雜度 | O(n) | 雖然轉型了好幾次,但是複雜度還是 n 的一次方 |
例如,以 966 的話,步驟如下
966
^
current diff: 3
diff: 3
966
^
current diff: 30
diff: max(3, 30) = 30
current diff: 0
diff: max(30, 0) = 30
結果值:
966 + 30 = 996
class Solution {
func maximum69Number (_ num: Int) -> Int {
var number = num
var diff = 0
var digits = 1
while number > 0 {
diff = max((9 - number % 10) * digits, diff)
number /= 10
digits *= 10
}
return num + diff
}
}
令 num 的位數為 n
Big O | 說明 | |
---|---|---|
時間複雜度 | O(n) | 線性走訪 |
空間複雜度 | O(1) | 只有多宣告了常數個的變數 |
解法 | 時間複雜度 | Runtime | 空間複雜度 | Memory |
---|---|---|---|---|
直覺解 | O(n) | 0 ms | O(n) | 13.6 MB |
數學解 | O(n) | 0 ms | O(1) | 13.4 MB |
兩者執行之後在 LeetCode 的差別看起來沒有很大,不過數學解有免去轉換型別消耗資源的優點。
以上,就是今天的 LeetCode in Swift ,
如果有什麼問題和回饋歡迎留言一起討論,今天就到這裡,明天見!