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

来源:互联网 发布:淘宝无线端装修尺寸 编辑:程序博客网 时间:2024/05/29 19:26

题目原文:
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,我是怎么也推不出这个公式。在这里感叹数学的强大,也希望有人能给出这个公式的证明。

0 0