
正文开始
递归是一种应用非常广泛的算法,或者是编程技巧。去的过程叫“递”,回来的过程叫“归”。
算法题
题型一
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。 示例: 输入: 38 输出: 2 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。由于 2 是一位数,所以返回 2。
我的思路:
我的解答:
class Solution {
public int addDigits(int num) {
if (num < 10)
return num;
char[] chars = String.valueOf(num).toCharArray();
num = 0;
for (Character c : chars) {
num += Integer.valueOf(c.toString());
}
return addDigits(num);
}
}别人的解法:
class Solution {
public int addDigits(int num) {
while (num >= 10) {
int next = 0;
while (num != 0) {
next = next + num % 10;
num /= 10;
}
num = next;
}
return num;
}
}题型二
递归乘法。写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。 示例1: 输入:A = 1, B = 10 输出:10 示例2: 输入:A = 3, B = 4 输出:12 提示: 保证乘法范围不会溢出
我的思路:
我的解答:
class Solution {
public int multiply(int A, int B) {
if (B == 0) return 0;
return A + multiply(A, --B);
}
}别人的思路:
题型三
给定一个二叉树,返回它的后序遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1]
我的思路:
我的解答:
无没错,又刷到了知识盲点。。。
我对二叉树的仅有的认知:
一个根节点、最多两个分支节点。
有前序遍历、中序遍历、后序遍历三种方式。
小结
每周刷刷题~
本周陪前端小老弟改数据结构的时候,被 React 的前端递归惊讶到了(递归已经还给算法老师了,不知道老师有没有收到。)
这个周末,又一次成功“强迫”自己学习。
感谢各位小伙伴的阅读,这里是一个技术人的学习与分享。