菜鸟写给菜鸟的 ——LeetCode解题笔记 Easy-题目2:258. Add Digits

题目原文:
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?
题目大意:
给一个正整数num,重复地计算每一个数位上数字之和,直到只剩一位数。
例如:给数字38,则3+8=11,1+1=2,那么返回2.
你可以不需要循环或递归,在O(1)时间完成它吗?
题目分析:
根据Hint中给出的wiki链接,这道题叫做数字根问题。求一个正整数n的数字根有如下公式: 因此可以一行解决。
源码:(language:c)

int addDigits(int num) {
    return 1+(num-1)%9;
}

成绩:
4ms,beats56.87% 众数:8ms 52.28%
Cmershen的碎碎念:
如果不给出hint,我是怎么也推不出这个公式。在这里感叹数学的强大,也希望有人能给出这个公式的证明。

阅读更多
版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs https://blog.csdn.net/cmershen/article/details/51540511
文章标签: leetcode
个人分类: Leetcode
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

菜鸟写给菜鸟的 ——LeetCode解题笔记 Easy-题目2:258. Add Digits

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭