大家好!![]()
最近在刷LeetCode,碰到了这道题:258. 各位相加 (Add Digits)。 感觉挺有意思的,就用Python写了个解法,顺便也分享一下我的Spotify面试经验。![]()
LeetCode 258 的题目描述很简单:给定一个非负整数,反复将它的各位数字相加,直到结果是一位数。这个一位数就是数字根。 例如:
38 → 3 + 8 = 11 → 1 + 1 = 2
乍一看,感觉暴力解法就能搞定:不断循环相加,直到结果小于10。 代码如下:
def addDigits(num: int) -> int:
while num >= 10:
sum_digits = 0
while num > 0:
sum_digits += num % 10
num //= 10
num = sum_digits
return num
这段代码清晰易懂,但效率不算很高。
其实,这道题有一个数学公式可以更快速地解决:
数字根 = (num - 1) % 9 + 1 (如果 num == 0, 数字根为 0)
所以,更高效的Python代码如下:
def addDigits_efficient(num: int) -> int:
return (num - 1) % 9 + 1 if num else 0
是不是简洁很多?!
这个公式的推导过程可以自行搜索,这里就不展开赘述了。
接下来,聊聊我的Spotify面试经验。这次面试主要考察了算法和数据结构,这道LeetCode 258只是其中一个小小的环节。 面试官更注重的是我解决问题的思路和代码的优雅程度,而不是简单的代码能否运行。 所以,大家在准备面试时,除了刷题,也要注重代码的可读性和可维护性。 记住,清晰的思路比复杂的代码更重要!![]()
希望我的分享对大家有所帮助! 祝大家都能拿到心仪的offer!
也欢迎大家一起讨论这道题的其他解法,或者分享你们的LeetCode刷题经验!![]()
