↓快轉到主要內容
  1. LeetCode/

LeetCode 989: Add to Array-Form of Integer

·1 分鐘· ·
LeetCode Easy Array Math
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-09-26

  • 提交紀錄:Runtime Error ×2 → Wrong Answer → Runtime Error → Accepted

解題思路
#

直式加法的技巧(Math 模板六):把整個 k 當成進位,從最後一位開始 k += num[i],這一位是 k % 10,剩下的 k //= 10 繼續往前。陣列走完 k 還有剩,就把 k 的位數補在前面。

我的嘗試
#

跟 LC 66 一樣,第一次是「轉成整數加 k 再拆回來」:''.join(num) 的元素是整數(TypeError),之後用 str(...).split() 拆,split 只會得到一個元素:[0]、22 回傳 [22],答案 [2, 2]。改成 list(str(...)) 就 AC 了。

正確解法
#

class Solution:
    def addToArrayForm(self, num: List[int], k: int) -> List[int]:
        res = []
        i = len(num) - 1
        while i >= 0 or k:
            if i >= 0:
                k += num[i]
                i -= 1
            res.append(k % 10)
            k //= 10
        return res[::-1]

複雜度
#

時間 O(max(n, log k)),空間 O(max(n, log k))。

要特別避免的錯誤
#

  • k 可能比陣列表示的數還長,陣列走完之後要繼續處理 k。
  • 回傳數字的 list,不是字串切出來的一個元素。

面試口說整理
#

我把 k 整個當成進位,從陣列最後一位往前加,每次取個位數放進答案、剩下的繼續進位,陣列走完 k 還有剩就繼續補位,最後反轉。時間 O(max(n, log k)),不用把陣列轉成大整數。

相關文章

LeetCode 908: Smallest Range I
·1 分鐘
LeetCode Easy Array Math
LeetCode 908 解題筆記:最大值往下調 k、最小值往上調 k,答案是 max(0, max - min - 2k)
LeetCode 914: X of a Kind in a Deck of Cards
·1 分鐘
LeetCode Easy Array Hash-Table Math Counting
LeetCode 914 解題筆記:每種卡片的張數都要能被同一個 X >= 2 整除,也就是所有張數的 GCD >= 2
LeetCode 892: Surface Area of 3D Shapes
·1 分鐘
LeetCode Easy Array Math Geometry Matrix
LeetCode 892 解題筆記:每疊 v 個方塊有 4v + 2 個面,再扣掉跟上方和左方相鄰的疊重疊的 2 × min 面
LeetCode 883: Projection Area of 3D Shapes
·1 分鐘
LeetCode Easy Array Math Geometry Matrix
LeetCode 883 解題筆記:俯視是非 0 的格子數,正視和側視分別是每一列、每一欄的最大值總和
LeetCode 812: Largest Triangle Area
·1 分鐘
LeetCode Easy Array Math Geometry Polygons
LeetCode 812 解題筆記:點最多 50 個,枚舉所有三點組合,用鞋帶公式算面積取最大
LeetCode 628: Maximum Product of Three Numbers
·1 分鐘
LeetCode Easy Array Math Sorting
LeetCode 628 解題筆記:排序後答案只有兩種可能:最大的三個相乘,或最小的兩個(負數)乘最大的一個