前言
LeetCode 258 题目难度等级,easy(官方给的)。leetcode258
题目描述
复制代码
1
2
3
4
5Given 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.
挑战:
Could you do it without any loop/recursion in O(1) runtime?
不要使用循环和递归实现,只用O(1)的时间复杂度。(ps:后文会给出leetcode中大神的实现)
大致意思:给出一个整数,计算各位的和,直到计算结果为个位数时,返回该结果。
非递归版解法:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18public int addDigits(int num) { // 存储每位数的和 int sum = 0; while (num >= 10) { // 并不能确定数字会执行多少次,所以一定是使用while 循环,而且一定是两层循环的嵌套, // 且这两个嵌套都不知道什么时候执行结束。---while与for循环的区别。 while (num != 0) { int digit = num % 10; sum += digit; num /= 10; } num = sum;// 更新num的值 sum = 0;// 对sum清零,准备存储下一个整数的各位的值 } return num; }
解题题眼:
复制代码
1
2
31、当不知道循环执行多少次时,只能使用while循环实现。 2、循环的出口是:当计算后的结果是[0,10)区间内的
递归版解法
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25public int addDigits(int num) { if (num < 10 && num >= 0) { return num; } // 递归实现整数的各位求和 int sum = sumNumInEachDigit(num, 0); return addDigits(sum); } /** * 递归实现整数的各位求和 * * @param num * @param sum * @return */ public int sumNumInEachDigit(int num, int sum) { if (num == 0) { return sum; } sum += (num % 10); return sumNumInEachDigit(num / 10, sum); }
递归的基础程序:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12/** * 基础的程序,打印整数的每个数字 * * @param num */ public void printEachNumInDigit(int num) { if (num == 0) { return; } System.out.println(num % 10); printEachNumInDigit(num / 10); }
题眼:
递归版的解法是基于基础程序修改的。步骤:
复制代码
1
2
3
4
51、在能写出使用递归打印每位的数字后, 2、然后再来求个各位上的和, 3、实现上层递归,上层递归出口就是[0,10)区间返回。
LeetCode discussion 题解:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21/** * 大神代码一 * * @param num * @return */ public int addDigits(int num) { return num == 0 ? 0 : (num % 9 == 0 ? 9 : (num % 9)); } /** * 大神代码二 * @param num * @return */ public int addDigits2(int num) { return 1 + (num - 1) % 9; }
类似题目:
leecode 202 HappyNum
题目归类:数论
最后
以上就是贪玩滑板最近收集整理的关于leetcode258 题解的全部内容,更多相关leetcode258内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复