周賽 391。好像常常在 Q1 看到數位分解。

題目

若一個整數能夠被其所有數字總和整除,則稱為哈沙德數。

輸入整數 x,若 x 是哈沙德數則回傳其數字總和,否則回傳 -1。

解法

py 做數位分解真的很方便,轉成字串再遍歷轉回整數。

時間複雜度 O(log x)。
空間複雜度 O(log x)。

class Solution:
    def sumOfTheDigitsOfHarshadNumber(self, x: int) -> int:
        sm = sum(int(d) for d in str(x))
        if x % sm == 0:
            return sm
        
        return -1

最正統的方法還是取餘數,每次對 10 求餘就可以拿到最靠右的位數。

時間複雜度 O(log x)。
空間複雜度 O(1)。

class Solution:
    def sumOfTheDigitsOfHarshadNumber(self, x: int) -> int:
        sm = 0
        t = x
        while t > 0:
            t, r = divmod(t, 10)
            sm += r
            
        if x % sm == 0:
            return sm
        
        return -1