-
Notifications
You must be signed in to change notification settings - Fork 2
/
258. Add Digits.py
38 lines (33 loc) · 1.05 KB
/
258. Add Digits.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# Given a non-negative integer num,
# repeatedly add all its digits until the result has only one digit.
# Example:
# Input: 38
# Output: 2
# Explanation: The process is like: 3 + 8 = 11, 1 + 1 = 2.
# Since 2 has only one digit, return it.
# Follow up:
# Could you do it without any loop/recursion in O(1) runtime?
# Hints:
# A naive implementation of the above process is trivial. Could you come up with other methods?
# What are all the possible results?
# How do they occur, periodically or randomly?
# You may find this Wikipedia(https://en.wikipedia.org/wiki/Digital_root) article useful.
class Solution(object):
def addDigits(self, num):
"""
:type num: int
:rtype: int
"""
# M1. 模拟
while num > 9:
tmp = 0
while num:
tmp += num%10
num /= 10
num = tmp
return num
# M2. 公式法
# https://en.wikipedia.org/wiki/Digital_root
if num < 10:
return num
return 1 + (num - 1) % (10 - 1)