leetcode_258

来源:互联网 发布:上海优越感知乎 编辑:程序博客网 时间:2024/06/09 19:35

1,题目大意

有一个非负整数num,重复这样的操作:对该数字的各位数字求和,对这个和的各位数字再求和……直到最后得到一个仅1位的数字(即小于10的数字)。

例如:num=38,3+8=11,1+1=2。因为2小于10,因此返回2。

2,分析
(1)通过循环求各个数的和:
num%10:得到是个位数
num/10 :得到的是个位以上的数

(2)用数组循环:
num可转换为一个字符数组nums,nums[i]-‘0’是这个数

(3)数根公式:

数根公式
or

解释看维基百科:
数根公式-维基百科

3,代码
(1)数学循环:

public static int addDigits(int num) {        while(true) {            if (num < 10) {                return num;            }            int sum = 0;            while(num != 0) {                sum += num % 10;                num = num/10;            }            num = sum;        }    }

(2)数组循环:

public static int addDigits(int num) {        while(num >=10){            String s = String.valueOf(num);            char[] nums = s.toCharArray();            int sum = 0;            for (int i = 0; i < nums.length; i++) {                sum += nums[i]-'0';            }            num = sum;        }        return num;    }

(3)数根公式:

public static int addDigits(int num) {        return (num-1)%9 +1;    }    public static int addDigits1(int num) {        int a = num % 9;        return a == 0?9:a;    }
1 0
原创粉丝点击