Add Digits
来源:互联网 发布:java电信资费系统 编辑:程序博客网 时间:2024/05/18 02:48
Add Digits
Difficulty: Easy
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?
Hide Tags Math
Hide Similar Problems
最直接的思路:
num2用来统计num有多少位;
num1用来做除数。
eg.num为345,取百位,则num1得为1000(取余后,/(num1/10)即得百位数3)
int addDigits(int num) { int num1,num2; num1=1,num2=0; int sum=0; if(num/10 == 0) return num; while(num1 <= num){ num1 *= 10; num2++; } while(num2--){ num %= num1; num1 /= 10; sum += num/num1; } addDigits(sum); }
最终结果显示:Last executed input:
2032610959
Status: Time Limit Exceeded
显然该法虽直接,但运算效率太低。
于是我们对这些数做了下计算:
0-9,全部都各自返回本身(0-9)
10 -> 1
11 - > 2
……
19 - > 2
20 - > 2
21 - > 3
……
发现规律,最终结果的区间总落在[0,9]之间。
21%9余3,20%9余2,19%9余1,18%9余0,但实际上18对应结果为9.
所以应该总结为(num-1)%9+1;
int addDigits(int num) { return (num-1)%9+1; }
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- java虚拟机回收机制原理
- 回调函数和钩子函数
- 蓝懿教育记录
- LeetCode Minimum Path Sum
- Leetcode: Longest Substring Without Repeating Characters
- Add Digits
- #读书笔记#《The Art of Software Testing》——第六章
- kernel-firmware
- bzoj-1128 Lam
- Bash shell中的位置参数$#,$*,$@,$0,$1,$2...及特殊参数$?,$-等的含义
- 使用CentOS DVD1 和DVD2做本地yum源
- HashMap
- 成为Java GC专家(4)—Apache的MaxClients参数详解及其在Tomcat执行FullGC时的影响
- rlimit 介绍