[LeetCode]258. Add Digits ★
作者:互联网
每天一道编程题
题目描述
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.
python解法
class Solution:
def addDigits(self, num: int) -> int:
return num % 9 or 9 * bool(num)
Runtime: 32 ms
Memory Usage: 13.8 MB
题后反思:
- 这种方法太巧了,如果是我自己想应该是想不到的。
- 分析:假设num是一个二进制的数,x和y分别表示它的十位数和个位数,那么num=x*10+y
=x*9+(x+y)
,式子中x+y恰好是十位数和个位数只和,也就是说十位数和个位数之和恰好为(num%9)。其中有个别例外,分别是0和整除9的数,为0时,结果为0;能整数9的数(除了0),结果应该为9,所以有上述式子来返回最终结果。
注:一个整数和布尔值相乘要么是0要么是整数本身
C语言解法
int addDigits(int num){
return num % 9 ? num % 9 : (num == 0) ? 0 : 9;
}
Runtime: 0 ms, faster than 100.00% of C online submissions for Add Digits.
Memory Usage: 6.8 MB, less than 100.00% of C online submissions for Add Digits.
题后反思:
- 同python解法,只不过要多用一个三目运算符。
文中都是我个人的理解,如有错误的地方欢迎下方评论告诉我,我及时更正,大家共同进步
标签:Digits,return,int,258,num,十位数,LeetCode,解法 来源: https://blog.csdn.net/xingyu97/article/details/100106757