跟着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 两数相加
迭代法
注意点:
- 返回链表的指针不能动,,,要创建一个current指针来紧随当前运行的情况
cur = res
- 最后返回的是
res.next
,因为一开始的值是空。
递归法
稍微,,,,尤其是最后有点点难理解
主要思路是让两个链表的一直加,如果有个链表没有了,就创建val为0的node。
结束条件:l1.next != null || l2.next != null || next !=0
最后返回的是res
1 | if(l1.next != null || l2.next != null || next !=0) { |
还行吧,,,大概的意思就理解。。。。哭哭
20 有效的括号
思路:将字符串通过函数
toCharArray()
变成数组,然后将左括号入栈,右边进行匹配,失败直接返回,成功继续,,,一直看最后的栈是否空即可。注意:根据题目已知“”空串返回true,所以一开始可以直接判断字符串长度是否为0。
增强for循环
从字符数组总依次取出字符
1 | for(char ch : s.toCharArray()) { |
?:返回
感觉和很有意思
1 | return stack.isEmpty()?true:false; |
21 合并两个有序链表
有了第二题的铺垫,,,,easy
迭代法
直接链入剩余的链表
1 | if(l1 == null) { |
赋值的两种方法
1 | //1. 创建一个新的node |
递归法
高级,需要好好理解。
递归首先要确认结束条件
接下来结果的链入interesting!
1 | // if(l1 == null) { |
22 括号生成
[搁置]暴力法
[搁置]的都稍后来做,,,先学算法吧。。。。
回溯法
emmm,这个是蓝桥杯里经常用的方法,,,,但是这里对有效括号的判断很有意思:
- 如果左括号小于n,就可以继续增加左括号
- 如果每时刻右括号的数量小于左括号的数量,就是有效的
- 当满足上述条件并且括号数量对了的时候,就可以添加进来了。
StringBuilder
创建
1 | new StringBuilder() |
声明
1 | StringBuilder cur; |
转String
1 | cur.toString() |
删除指定位置元素
1 | cur.deleteCharAt(cur.length()-1); |