LeetCode 258. Add Digits

LeetCode 258. Add Digits (各位相加)

题目

链接

https://leetcode-cn.com/problems/add-digits/

问题描述

给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。

示例

输入: num = 38
输出: 2
解释: 各位相加的过程为:
38 --> 3 + 8 --> 11
11 --> 1 + 1 --> 2
由于 2 是一位数,所以返回 2。

提示

0 <= num <= 231 - 1

思路

考虑到节省运算次数,找规律。

假设原数为 100a+10b+c,这三位数相加之后的值为a+b+c,二者的差值为99a+9b,恰好可以被9整除,所以我们可以直接计算a+b%9.

但是我们还需要考虑到一件事,如果数字为18这样的,运算之后应该得到的答案是9,刚好被整除,此时就可以考虑加以修正,如果计算出0的话,返回9.

复杂度分析

时间复杂度 O(1)
空间复杂度 O(1)

代码

Java

    public int addDigits(int num) {
        if (num == 0) {
            return 0;
        }
        int ans = num % 9;
        if (ans == 0) {
            return 9;
        } else {
            return ans;
        }
    }
posted @ 2019-05-29 09:34  cheng102e  阅读(100)  评论(0编辑  收藏  举报