本文共 1249 字,大约阅读时间需要 4 分钟。
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?
What are all the possible results? How do they occur, periodically or randomly? You may find this Wikipedia article useful. Credits: Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.挺简单的一道题。
public int addDigits(int num) { if (num / 10 == 0) return num; int sum = 0; while (true) { sum += num % 10; num = num / 10; if (num == 0) { if (sum / 10 == 0) return sum; num = sum; sum = 0; } } }
发人深省吧
1.逐位相加直到小于10
public int addDigits(int num) { while (num >= 10) { num = (num / 10) + num % 10; } return num; }
2.通过输入距离来发现规律
123456789 10 11 12 13 14 15
123456789 1 2 3 4 5 6
public int addDigits(int num) { return 1 + (num - 1) % 9; }
转载地址:http://ztmfm.baihongyu.com/