日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 21合并两个有序链表22括号生成

發布時間:2025/3/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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節點位置。

具體實現為:

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {if(l1==null)return l2;if(l2==null)return l1;if(l1.val>l2.val)//l1更小{ListNode team=l1;l1=l2;l2=team;}ListNode value=l1;while (l2!=null) {if(l1.next==null){l1.next=l2;break;}else if (l1.next.val<l2.val) {l1=l1.next;}else {ListNode node=l1.next;l1=l1.next=l2;l2=node;//l1=l1.next;}}return value; }

括號生成

數字 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括号生成的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。