美文网首页
258. Add Digits

258. Add Digits

作者: 白菜炖豆腐 | 来源:发表于2016-05-12 21:58 被阅读0次

题目

Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.

For example:

Given num = 38, 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?

Hint:

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 article useful.

分析

题目要求一个数的数字根,一开始我的想法是像题目说的一样,一直循环/递归去找到答案,但是感觉好麻烦,看了提示后,百度了一下数字根后,原来有这么一个公式可以快速求

a的数根b = ( a - 1) % 9 + 1

原来如此简单,但是为什么会这样子呢?想不明白,后来查了下资料,感觉这个解释好像有点道理

12,345 = 1 × (9,999 + 1) + 2 × (999 + 1) + 3 × (99 + 1) + 4 × (9 + 1)+ 5.
12,345 = (1 × 9,999 + 2 × 999 + 3 × 99 + 4 × 9) + (1 + 2 + 3 + 4 + 5).

所以数根就是这个数对9的余数,但是当这个数为9的时候就不行了,所以先减去1再加上1(可以这样子做吗?好像可以吧。)

代码

class Solution {
public:
    int addDigits(int num) { 
        return 1+(num-1)%9;
    }
};

相关文章

  • Leetcode PHP题解--D69 258. Add Dig

    D69 258. Add Digits 题目链接 258. Add Digits 题目分析 给定一个数字,给每一位...

  • 2019-02-02

    LeetCode 258. Add Digits Description Given a non-negative...

  • 258. Add Digits

    258. Add Digits[思路]数字累加,将给定的一个整数,将个位,十位,百位等相加,连续操作,直到最后的值...

  • 258. Add Digits

    循环: 这个办法很神奇

  • 258. Add Digits

    Problem Given a non-negative integer num, repeatedly add ...

  • 258. Add Digits

    问题 Given a non-negative integer num, repeatedly add all i...

  • 258. Add Digits

    1.描述 Given a non-negative integer num, repeatedly add all...

  • 258. Add Digits

    C++ Java Javascript 题目问能不能做出不用循环和递归的O(1)复杂度,没做出来,(╯‵□′)╯︵...

  • 258. Add Digits

    Given a non-negative integernum, repeatedly add all its d...

  • 258. Add Digits

    传统的loop方法 我有点讨厌的trick方法: 对于B进制来说 N最后遗留下来的数符合以下规则:1.如果N=0,...

网友评论

      本文标题:258. Add Digits

      本文链接:https://www.haomeiwen.com/subject/kdmprttx.html