吉林省建设厅网站首页,少儿编程加盟哪个品牌好,雅安网站建设,为企业做优做强20. 有效的括号
题目链接#xff1a;20. 有效的括号 - 力扣#xff08;Leetcode#xff09;
思路#xff1a;使用栈
#xff08;1#xff09;遇到左括号就将其对应的右括号压入到栈中
#xff08;2#xff09;如果遇到右括号 a. 如果弹出的元素与当前不等#xff…
20. 有效的括号
题目链接20. 有效的括号 - 力扣Leetcode
思路使用栈
1遇到左括号就将其对应的右括号压入到栈中
2如果遇到右括号 a. 如果弹出的元素与当前不等false b. 如果相等就弹出
3遍历s结束后若栈还是不为空说明有多余的右括号返回false
Java代码
class Solution {public boolean isValid(String s) {StackCharacter st new Stack();for(int i 0; i s.length();i){char ch s.charAt(i);//遇到左括号就压入对应的右括号if(ch (){st.push());}else if(ch {){st.push(});}else if(ch [){st.push(]);}else if(st.isEmpty() || ch ! st.peek()){return false;}else{st.pop();}}//遍历结束后如果st不为空说明有多余的右括号return st.isEmpty();}
} 21. 合并两个有序链表
题目链接21. 合并两个有序链表 - 力扣Leetcode
看完别人文章后的思路该文章链接里的热评有对于递归的理解一定要看 文章链接 21. 合并两个有序链表 - 力扣Leetcode 递归三部曲 1确定函数返回值及参数 2确定终止条件 如果两个链表有一个为空说明可以终止 3确定单层递归逻辑
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;}else if(list2 null){return list1;}else if(list1.val list2.val){//list1的值小所以考虑list1节点的链接//下一个节点要看下一层递归了就看list1.next(因为list1已经在该层递归选了) 和 list2list1.next mergeTwoLists(list1.next,list2);//告诉上一次递归我返回了个节点给你你链接这个节点return list1;}else{list2.next mergeTwoLists(list1,list2.next);return list2;}}
} 22. 括号生成
题目链接21. 合并两个有序链表 - 力扣Leetcode
思路组合问题且题目中提到说是要是有效的括号组合考虑使用回溯算法回溯三部曲
1确定回溯函数返回值和参数 返回值void 参数String strint left剩余左括号的个数,int right剩余右括号的个数
2确定终止条件 如果left 0 right 0收获str
3确定单层递归逻辑
看完官方题解的反思
1自己不知道如何确定有效的括号组合左括号必须用相同类型的右括号闭合左括号必须以正确的顺序闭合
2剩余左括号总数要小于等于右括号
Java代码
class Solution {ListString res new ArrayList();public ListString generateParenthesis(int n) {if(n 0){return res;}getParenthesis(,n,n);return res;}private void getParenthesis(String str,int left, int right) {if(left 0 right 0 ){res.add(str);return;}if(left right){//剩余左右括号数相等下一个只能用左括号getParenthesis(str(,left-1,right);}else if(left right){//剩余左括号小于右括号下一个可以用左括号也可以用右括号if(left 0){getParenthesis(str(,left-1,right);}getParenthesis(str),left,right-1);}}}