題目

  • 題目連結
  • 目標函式 : differenceOfSum(nums)
    • Input : nums: List[int]
    • Output : int

解題概念

  • 題意 : 給予一陣列 nums,計算出其 Element sumDigit sum,並回傳兩者的絕對差
    • Element sum : nums 中所有元素的總和
    • Digit sum : 出現在 nums 之所有 digits 的總和

我的寫法

  • 想法 :
    • 針對 nums 的每筆數字,計算每個數字取其 Digit sum 的絕對差值,最後加總起來即為解答
  • 程式碼 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    def check(self, n): # 計算數字 n 的 Digit sum
    res = 0
    while n != 0:
    res += (n % 10)
    n = n // 10
    return res

    def differenceOfSum(self, nums):
    final = 0

    # 針對 nums 的每筆數字
    for i in range(len(nums)):
    t1 = nums[i] # t1 為數字本身
    t2 = self.check(nums[i]) # t2 為該數字的 Digit sum

    # 計算該數字的絕對差值
    res = t1 - t2
    if res < 0:
    res *= (-1)

    final += res
    return final
  • 成效 :
    • Time Complexity : $\color{DB4D6D}{O(n)}$

解答 or 其他優秀寫法

  • 想法 :
    • 與我的算法類似,但主要差在它事先計算出整體的 Element sum 與 Digit sum ,最後再回傳兩者的絕對差值
  • 程式碼 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    def differenceOfSum(self, nums):
    dsum = 0 # 整體的 Digit sum
    esum = 0 # 整體的 Element sum

    # 針對 nums 的每筆數字
    for i in range(len(nums)):
    # 處理 Element sum
    esum += n

    # 處理 Digit sum
    while n > 0:
    dsum += n % 10
    n = n // 10

    return abs(esum - dsum)
  • 成效 :
    • Time Complexity : $\color{DB4D6D}{O(n)}$