LeetCode 21合并两个有序链表22括号生成
微信搜索bigsai,回復進群,加入打卡。維護不易,歡迎點贊支持!
合并兩個有序列表
將兩個升序鏈表合并為一個新的 升序 鏈表并返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。
示例:
輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4
分析:
思路,這題思路比較簡單,合并兩個有序鏈表,可以創建一個新的鏈表,然后兩個子鏈表進行遍歷比較插入當前較小的那個。
具體代碼為:
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {ListNode value=new ListNode(Integer.MIN_VALUE);ListNode team=value;while (l1!=null||l2!=null) {if(l1==null){team.next=l2;break;}else if (l2==null) {team.next=l1;break;}else {if(l1.val<l2.val){team.next=new ListNode(l1.val);team=team.next;l1=l1.next;}else {team.next=new ListNode(l2.val);team=team.next;l2=l2.next;}}}return value.next;}當然,也可以將其中一個鏈表L1設為定的,然后另一個L2插入進來合并。具體實現是每次向下一步,如果需要插入則把另一個鏈表整個都插入進來,相當于交換L1,L2節點位置。
具體實現為:
括號生成
數字 n 代表生成括號的對數,請你設計一個函數,用于能夠生成所有可能的并且 有效的 括號組合。
示例:
輸入:n = 3
輸出:[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
分析
這一題剛拿到手可能沒啥思路解決,不知道采用什么數學方法,但是你要看到所有可能的括號組合。所有二字,擺明是搜索題,可以dfs或者bfs,這里采用dfs完成。
dfs搜索需要考慮遍歷所有情況,還有就是初始和停止的條件,我們知道dfs是回溯的,如果字符串頻繁創建刪除效率很低,所以利用回溯回來過程將字符串還原(StringBuilder)這樣可以大大提升效率。而具體需要這樣思考:
- n對括號,說明有n個(和n個),可用兩個數字標記兩個個數。
- (個數不能小于)的個數,否則不滿足有效括號。
- 如果(用完,那么只能添加),如果(未用完且不滿足小于)個數,那么當前既可添加(也可添加)。
- 注意作用域,參數等問題
具體實現代碼為:
List<String>list;public List<String> generateParenthesis(int n) {list=new ArrayList<String>();StringBuilder sBuilder=new StringBuilder();dfs(sBuilder,0,0,n);return list; }private void dfs(StringBuilder sBuilder, int i, int j,int n) {if(j==n) {list.add(sBuilder.toString());return;}if(i<j)return;if(i<n){sBuilder.append('(');dfs(sBuilder, i+1, j, n);sBuilder.deleteCharAt(i+j);}if(i>j){sBuilder.append(')');dfs(sBuilder, i, j+1, n);sBuilder.deleteCharAt(i+j);} }結語
原創不易,bigsai請你幫兩件事幫忙一下:
star支持一下, 您的肯定是我在平臺創作的源源動力。
微信搜索「bigsai」,關注我的公眾號,不僅免費送你電子書,我還會第一時間在公眾號分享知識技術。加我還可拉你進力扣打卡群一起打卡LeetCode。
記得關注、咱們下次再見!
總結
以上是生活随笔為你收集整理的LeetCode 21合并两个有序链表22括号生成的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode19删除链表的倒数第N个
- 下一篇: LeetCode 23合并K个升序链表2