LeetCode Hot100 Day2
LeetCode刷题日记 约 3.8 千字
合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:

输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]
示例 2:
输入:l1 = [], l2 = [] 输出:[]
示例 3:
输入:l1 = [], l2 = [0] 输出:[0]
提示:
- 两个链表的节点数目范围是
[0, 50] -100 <= Node.val <= 100l1和l2均按 非递减顺序 排列
思路:
两边依次比较大小,如果两个有其中一个读完,直接将另一个链表剩下的返回即可。其实就是更改两个链表的连接顺序,如标准图解:

代码(Java):
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
if (list1 == null) return list2;
if (list2 == null) return list1;
if (list1.val <= list2.val) {
list1.next = mergeTwoLists(list1.next, list2);
return list1;
} else {
list2.next = mergeTwoLists(list1, list2.next);
return list2;
}
}
}
爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例 1:
输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶
示例 2:
输入:n = 3 输出:3 解释:有三种方法可以爬到楼顶。 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶
提示:
1 <= n <= 45
思路:
思考最后一级有几种到达方法:到达n级的上一步一定在n-1或n-2级,而n-1对应一步,n-2对应两步,n自然为3步;设步数为因变量f,级数为自变量n,就有f(n)=f(n-1)+f(n-2);就是把到达每一级的步数列出来就是熟悉的斐波那契数列。
因为只考虑最后一级的步数,可以动态的保存ans变量,每计算完一级将val1,val2,ans相应都向后移动一级即可。
代码(Java):
class Solution {
public int climbStairs(int n) {
if (n <= 2) return n;
int ans = 0;
int val1 = 1;
int val2 = 2;
for (int i = 3; i <= n; i++) {
ans = val1+val2;
val1 = val2;
val2 = ans;
}
return ans;
}
}