0%

leetcode刷题(入门)

跟着bilibili视频:Leetcode力扣 1-300题视频讲解合集|手画图解版+代码【持续更新ing】来先简单学习

更新中。。。

1 两数之和

两种方法:暴力法和哈希表

暴力法

直接用常数创建数组

1
return new int[] {i,j};

哈希表

创建

1
Map<Integer,Integer> hashtable = new HashMap<Integer,Integer>();

添加

1
hashtable.put(nums[i],i);

包含某一个键

1
hashtable.containsKey(target - nums[i])

得到值

1
hashtable.containsKey(target - nums[i])

2 两数相加

迭代法

注意点:

  1. 返回链表的指针不能动,,,要创建一个current指针来紧随当前运行的情况cur = res
  2. 最后返回的是res.next,因为一开始的值是空。

递归法

稍微,,,,尤其是最后有点点难理解

主要思路是让两个链表的一直加,如果有个链表没有了,就创建val为0的node。

结束条件:l1.next != null || l2.next != null || next !=0

最后返回的是res

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if(l1.next != null || l2.next != null || next !=0) {
if(l1.next!=null) {
l1 = l1.next;
}else {
l1 = new ListNode(0);
}
if(l2.next != null) {
l2 = l2.next;
}else {
l2 = new ListNode(0);
}
l1.val += next;
res.next = addTwoNumbers(l1, l2);
}

还行吧,,,大概的意思就理解。。。。哭哭

20 有效的括号

思路:将字符串通过函数toCharArray()变成数组,然后将左括号入栈,右边进行匹配,失败直接返回,成功继续,,,一直看最后的栈是否空即可。

注意:根据题目已知“”空串返回true,所以一开始可以直接判断字符串长度是否为0。

增强for循环

从字符数组总依次取出字符

1
2
for(char ch : s.toCharArray()) {
}

?:返回

感觉和很有意思

1
return stack.isEmpty()?true:false;

21 合并两个有序链表

有了第二题的铺垫,,,,easy

迭代法

直接链入剩余的链表

1
2
3
if(l1 == null) {
cur.next = l2;
}

赋值的两种方法

1
2
3
4
//1. 创建一个新的node
cur.next = new ListNode(l2.val);
//2.将l2赋值,只有节点,不是链表
cur.next = l2;

递归法

高级,需要好好理解。

递归首先要确认结束条件

接下来结果的链入interesting!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//		if(l1 == null) {
// return l2;
// }
// if(l2 == null) {
// return l1;
// }
if(l1 == null || l2 == null) {
return l1 == null ? l2 : l1;
}
if(l1.val <= l2.val) {
l1.next = mergeTwoLists(l1.next, l2);
return l1;
}else {
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}

22 括号生成

[搁置]暴力法

[搁置]的都稍后来做,,,先学算法吧。。。。

回溯法

emmm,这个是蓝桥杯里经常用的方法,,,,但是这里对有效括号的判断很有意思:

  1. 如果左括号小于n,就可以继续增加左括号
  2. 如果每时刻右括号的数量小于左括号的数量,就是有效的
  3. 当满足上述条件并且括号数量对了的时候,就可以添加进来了。

StringBuilder

创建
1
new StringBuilder()
声明
1
StringBuilder cur;
转String
1
cur.toString()
删除指定位置元素
1
cur.deleteCharAt(cur.length()-1);
Q:如果阅读本文需要付费,你是否愿意为此支付1元?