如果不小心网友来到了这里请网友自动飘走,浪费你们时间表示歉意。该系列博客的目的是:想自己作为自律工具趁着过年没事每天刷几道题作为打卡督促的功能,没有什么可参考学习的东西,也不是刷博客量充大佬的目的
2021放假第七天,2月12日
递归
题号:21
function ListNode(val, next) {
this.val = (val === undefined ? 0 : val)
this.next = (next === undefined ? null : next)
}
//再简单的递归问题也不能在脑子中去绘制递归的每一步,容易走火入魔,也是不正常的思考方式
//递归是一个长龙,中间看一个过程,末尾(出口)看一下就行了
var mergeTwoLists = function (l1, l2) {
if (l1 == null) {
return l2
}
if (l2 == null) {
return l1
}
if (l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2)
return l1
} else {
l2.next = mergeTwoLists(l1, l2.next)
return l2
}
};
题号:面试题0806
var hanota = function (A, B, C) {
helper(A.length, A, B, C)
};
//递归的a,b,c是通过参数下发的要小心我们处理的a,b,c和原始的a,b,c的不一样
function helper(num, a, b, c) {
if (num == 1) {
//把a最上一个挪到b
c.unshift(a.shift())
return
}
//递归的核心逻辑
//当2层的时候推演一下
//当3层的时候推演一下
//真不行再推演4层的时候
//发现规律,在n>2的时候和n=2一样(压缩饼干),把n以上的层数压缩为1层考虑
//那么递归的每一次处理逻辑就是:怎么把n以上的n-1层借助可用的柱子移动出来
//漏出最后一层,把最后一层就一个,直接挪过去即可
helper(num - 1, a, c, b)
//把a最上一个挪到c
c.unshift(a.shift())
//把b最上移动到c
helper(num - 1, b, a, c)
}
题号:剑指offer10-1
//纯递归超时
var fib = function (n) {
if (n == 0) {
return 0
}
if (n == 1) {
return 1
}
return (fib(n - 1) + fib(n - 2)) % 1000000007
};
//动态规划
var fib = function (n) {
//这里状态压缩我只需要记录2个状态,那么就开辟1个max为2的数组记录即可
let dptable = []
for (let i = 0; i <= n; i++) {
if (i == 0) {
dptable.unshift(0)
} else if (i == 1) {
dptable.unshift(1)
} else {
dptable.unshift((dptable[0] + dptable[1]) % 1000000007)
dptable.pop()
}
}
return dptable.shift()
};
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!