Description
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?
描述
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。
示例:
输入: 38
输出: 2
解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。
进阶:
你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?
思路
- 数字19分别对应19,数字1018分别对应19,数字1917分别对应19,即从1开始,9个数字作为一个循环.
- 我们用当前的数罪9取模,如果求模结果为0返回9,如果不为零返回求模运算的结果,如果num本身就是0我们直接返回0.
# -*- coding: utf-8 -*- # @Author: 何睿 # @Create Date: 2019-02-02 23:27:58 # @Last Modified by: 何睿 # @Last Modified time: 2019-02-02 23:29:33 class Solution: def addDigits(self, num): """ :type num: int :rtype: int """ if num == 0: return 0 b = num % 9 return b if b != 0 else 9
源代码文件在这里.