题解
92. 反转m到n
p和q,分别移到m-1和m的位置
循环n-m次:
把q后面的删掉
删掉的塞到p后面
300. 最长递增子序列
从前到后遍历nums:
if nums[cur] > nums[i]:
dp[cur] = Math.max(dp[cur],dp[i]+1)
max = Math.max(max,dp[cur])
22. (剑指)倒数第k节点
p和q,都从head开始
q先走k步
q!=null:
p和q前进
199. 二叉树右视图
bfs和dfs两种解法,其中bfs的写法类似层序遍历,dfs从右往左递归遍历
- bfs
建一个queue,存入root
while queue非空:
循环queue.size次:
取出queue队首(如果是最后一次,把该值加入res)
queue的左、右入队
- dfs
建一个list存res
递归函数dfs(TreeNode root,int depth):
如果depth==res.size(),res加入root的值
dfs右子树
dfs左子树
70. 爬楼梯
dp[0]=1,dp[1]=2
从2到n-1:
dp[i]=dp[i-1]+dp[i-2]
23. 合并k个升序链表
while true:
遍历所有的lists
记录最小的值,记录索引 i (最小的那个ListNode)
如果遍历后最小值没有更新:break
把索引处的ListNode加入到结果集合的tail后面,再移动tail到最后新加的那位上
更新list[i]处的ListNode为下一位
2. 两数相加
while true
break:l1空且l2空
l1 + l2 + carry,哪个空,哪个值当0
更新进位carry carry=sum/10
sum%10加入新链表
移动新链表指针,l1和l2非空则后移
进位为1,在链表末尾新增节点
|