[LeetCode]258. Add Digits ★

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/xingyu97/article/details/100106757

题目描述

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
题后反思:

  1. 这种方法太巧了,如果是我自己想应该是想不到的。
  2. 分析:假设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.
题后反思:

  1. 同python解法,只不过要多用一个三目运算符。

文中都是我个人的理解,如有错误的地方欢迎下方评论告诉我,我及时更正,大家共同进步

猜你喜欢

转载自blog.csdn.net/xingyu97/article/details/100106757