LeetCode - Add Digits

    xiaoxiao2021-03-25  165

    题目原址:https://leetcode.com/problems/add-digits/?tab=Description

    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?

    这道题的关键在于题目要求时间复杂度为O(1), 显然一般的方法是做不到的,这里我们用 repeated digital sum,也叫 digital root 算法直接求解。

    Congruence formula: f(num)=1+(num1)%9

    关于这个算法的详细介绍,大家可以看wiki,讲的非常清楚: https://en.wikipedia.org/wiki/Digital_root

    最后附上代码片段:

    class Solution { public: int addDigits(int num) { return 1 + ((num - 1) % 9); } };
    转载请注明原文地址: https://ju.6miu.com/read-11411.html

    最新回复(0)