本人正在努力加入浩浩荡荡的程序员组织,目前定位在数据挖掘与自然语言处理两块。但是无论如何,得先从leetcode做起。所以做过的题目,有空就往博客上丢,希望与大家一
同进步!
Problem:
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?
Solution: 本人习惯用Java 【老实说,除了Java,其他都不太会】
1. 逐位相加直到小于10
/* 理解进位的原理,同一级别两个数相加,超过10进1。而这个题目的初衷就是,各个位数相加,超过10需要再进行各个位数相加的工作。其实和进位有异曲同工之妙。*/
- public int addDigits(int num) {
- while(num>=10){
- num = (num/10)+num%10;
- }
- return num;
- }
2.通过规律
原num:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ....
结果 : 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 ....
- public int addDigits(int num) {
- return 1 + (num-1)%9;
- }