LintCode之Add Digits

来源:互联网 发布:电脑软件出现乱码 编辑:程序博客网 时间:2024/06/05 15:08

lintCode之Add Digits

题目描述

Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.

样例
Given num = 38. The process is like: 3 + 8 = 11, 1 + 1 = 2. Since 2 has only one digit, return 2.

思路分析
我的理解这道题主要是把大于10的数个位和十位数进行求和,得到的结果如果大于10,再进行同样的求和,题目的理解不难,对于如何求解请看下面的代码展示

public class Solution {    /**     * @param num a non-negative integer     * @return one digit     */    public int addDigits(int num) {        while(num/10>0){//判断是否符合题目要求            int sum = 0;            while(num>0){                sum += num%10;//num%10得到个位数                num /= 10;            }            num = sum;        }        return num;    }}

对于更简单的方法可以分析一下各个数的特点
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 1
11 2
12 3
13 4
14 5
15 6
.
.
.
可以看出来,9个数为一个循环,初步可以得出结果为 num%9。但是发现num为9的话结果就为0,所以可以改成(num-1)%9+1
所以代码也可以写成

public class Solution {    /**     * @param num a non-negative integer     * @return one digit     */    public int addDigits(int num) {          return (num-1)%9+1;    }}

参考文章

0 0
原创粉丝点击