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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LeetCode 92反转链表Ⅱ93复制ip地址94二叉树的中序遍历

發(fā)布時間:2025/3/20 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 92反转链表Ⅱ93复制ip地址94二叉树的中序遍历 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

微信搜一搜:bigsai 專注于Java、數(shù)據(jù)結(jié)構(gòu)與算法,一起進大廠不迷路!
算法文章題解全部收錄在github倉庫bigsai-algorithm,求star!
關(guān)注回復進群即可加入力扣打卡群,歡迎劃水。近期打卡:
LeetCode 90子集Ⅱ&91解碼方法
LeetCode 86分割鏈表&87擾亂字符串
LeetCode 88合并兩個有序數(shù)組&89格雷編碼

反轉(zhuǎn)鏈表Ⅱ

反轉(zhuǎn)從位置 m 到 n 的鏈表。請使用一趟掃描完成反轉(zhuǎn)。

說明:

1 ≤ m ≤ n ≤ 鏈表長度。

示例:

輸入: 1->2->3->4->5->NULL, m = 2, n = 4
輸出: 1->4->3->2->5->NULL

分析:
這種題實現(xiàn)的方法可能比較多,但是我這里使用頭插法去實現(xiàn)。m-n范圍內(nèi)進行反轉(zhuǎn),那么只需要將這部分的鏈表順序頭插在m-1位的后面即可。后面再拼接起來。

防止m包含頭部,可以引入一個頭節(jié)點進行處理。在具體的處理上可能有點繁瑣,因為頭插的時候遍歷這個節(jié)點插入要改變結(jié)構(gòu),要在插入前將后側(cè)nextNode存儲下來下次使用。

具體實現(xiàn)代碼為:

/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/ class Solution {public ListNode reverseBetween(ListNode head, int m, int n) {ListNode value=new ListNode(0);//頭節(jié)點value.next=head;ListNode team=value;//臨時節(jié)點int index=1;//記錄標記while (index<m) {team=team.next;index++;}//team 后面需要頭插ListNode tail=team.next;//m節(jié)點,最后會在最后ListNode node=team.next;while (index<=n) {ListNode nextNode=node.next;//先儲存右側(cè)節(jié)點node.next=team.next;//插入第一步。將自己右側(cè)指向team.next=node;//插入第二步,前面team指過來node=nextNode;index++;}tail.next=node; //逆置的鏈表和后面節(jié)點連接return value.next;} }

復原ip地址

給定一個只包含數(shù)字的字符串,復原它并返回所有可能的 IP 地址格式。

有效的 IP 地址 正好由四個整數(shù)(每個整數(shù)位于 0 到 255 之間組成,且不能含有前導 0),整數(shù)之間用 ‘.’ 分隔。

例如:“0.1.2.201” 和 “192.168.1.1” 是 有效的 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 無效的 IP 地址。

示例 1:

輸入:s = "25525511135" 輸出:["255.255.11.135","255.255.111.35"]

示例 2:

輸入:s = "0000" 輸出:["0.0.0.0"]

示例 3:

輸入:s = "1111" 輸出:["1.1.1.1"]

示例 4:

輸入:s = "010010" 輸出:["0.10.0.10","0.100.1.0"]

示例 5:

輸入:s = "101023" 輸出:["1.0.10.23","1.0.102.3","10.1.0.23","10.10.2.3","101.0.2.3"]

提示:

0 <= s.length <= 3000 s 僅由數(shù)字組成

分析
本題的話是一種典型的回溯算法,不過這題剪枝的方法非常重要,否則會產(chǎn)生很多不必要的計算。

不考慮其他條件,其實就是要枚舉所有的劃分方式,然后分成4份、每個數(shù)字滿足條件,且剛好用完所有數(shù)字。而本題設(shè)計遞歸函數(shù)的時候,可以帶上當前index和當前數(shù)字數(shù)量進行向下遞歸,且向下的時候要注意數(shù)字大小在0-255且0不能做其他數(shù)字前綴。另外還可以進行其他剪枝(從字符剩余數(shù)量判斷能否組成答案每位1-3位)。

具體代碼為:

class Solution {public List<String> restoreIpAddresses(String s) {List<String>list=new ArrayList<String>();List<String>value=new ArrayList<String>();char ch[]=s.toCharArray();dfs(value,list,ch,0,0);return value;}private void dfs(List<String> value, List<String> list, char[] ch, int index, int num) {// TODO Auto-generated method stubif(num==4&&index==ch.length){StringBuilder sBuilder=new StringBuilder();sBuilder.append(list.get(0));for(int i=1;i<4;i++){sBuilder.append('.');sBuilder.append(list.get(i));}value.add(sBuilder.toString());}else if(num==4||index>=ch.length) return;else {if((4-num)*3<ch.length-index-1||ch.length-index<4-num)//剩下的已經(jīng)不可能{return;}else if (ch[index]=='0') {list.add("0");dfs(value, list, ch, index+1, num+1);list.remove(list.size()-1);}else {StringBuilder sBuilder=new StringBuilder();for(int i=0;i<3&&index+i<ch.length;i++){sBuilder.append(ch[index+i]);if(i==2&&Integer.parseInt(sBuilder.toString())>255)return;list.add(sBuilder.toString());dfs(value, list, ch, index+i+1, num+1);list.remove(list.size()-1);}}}} }

二叉樹的中序遍歷

示例 1:

輸入:root = [1,null,2,3] 輸出:[1,3,2]

示例 2:

輸入:root = [] 輸出:[]

示例 3:

輸入:root = [1] 輸出:[1]

示例 4:

輸入:root = [1,2] 輸出:[2,1]

示例 5:

輸入:root = [1,null,2] 輸出:[1,2]

提示:

樹中節(jié)點數(shù)目在范圍 [0, 100] 內(nèi) -100 <= Node.val <= 100

分析
中序遍歷可以看這篇:數(shù)據(jù)結(jié)構(gòu)與算法—二叉樹的層序、前序中序后序(遞歸、非遞歸)遍歷
上代碼:

/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/ class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer>value=new ArrayList<Integer>();dfs(root,value);return value;}private void dfs(TreeNode root, List<Integer> value) {// TODO Auto-generated method stubif(root==null)return;dfs(root.left, value);value.add(root.val);dfs(root.right, value); } }

原創(chuàng)不易,bigsai請你幫兩件事幫忙一下:

  • star支持一下, 您的肯定是我在平臺創(chuàng)作的源源動力。

  • 微信搜索「bigsai」,關(guān)注我的公眾號,不僅免費送你電子書,我還會第一時間在公眾號分享知識技術(shù)。加我還可拉你進力扣打卡群一起打卡LeetCode。

  • 記得關(guān)注、咱們下次再見!

    總結(jié)

    以上是生活随笔為你收集整理的LeetCode 92反转链表Ⅱ93复制ip地址94二叉树的中序遍历的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。