leetcode 93. 復原IP地址 思考分析

題目

給定一個只包含數字的字符串,復原它并返回所有可能的 IP 地址格式。 有效的 IP 地址 正好由四個整數(每個整數位于 0 到 255之間組成,且不能含有前導 0),整數之間用 ‘.’ 分隔。 例如:“0.1.2.201” 和 “192.168.1.1” 是 有效的 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 無效的 IP 地址。
在這里插入圖片描述
在這里插入圖片描述

思考

這一題和leetcode 131. 分割回文串 思考分析很像,都屬于利用回溯法分割字符串,所以解法上具有一定相似性。
回溯終止條件
如果逗號已經插入了3次了,觀察最后一次插入往后的位置,觀察剩下來的字符串能否構成合法字符串。
如果能構成,那么將s裝入結果;
如果不能構成,回溯到上一個階段。

//如果逗號數量為3,判斷第四個子區間是否合法,如果合法就放入結果中
if(point_nums==3)
{if(isValid(s,startindex,s.size()-1)){result.push_back(s);}return;
}

回溯邏輯
1、這里利用逗號來進行分割,在原string上進行操作。如果startindex~i之間的字符串合法的話,我們就在i后面插入一個逗號。
然后對逗號后面的字符串進行回溯遍歷。不滿足的回溯組合將把逗號消除,完成回撤。

for(int i=startindex;i<s.size();i++)
{//子串區間:[startindex,i]if(isValid(s,startindex,i))     //判斷子串區間的子串是否合法{s.insert(s.begin()+i+1,'.'); //在i后面插入一個逗號point_nums++;backtracking(s,i+2);        //切割過的字符不能再次被切割,插入逗號之后下一個子串的起始位置發生往后移動1//回溯撤銷point_nums--;s.erase(s.begin()+i+1);     //回溯刪除逗號}//不合法的子串直接結束本層循環,只要一個子串不合法,結果就是不合法的else break;
}

2、考察字符串是否合法:

//判斷字符串s[start,end]組成的數字是否合法
bool isValid(const string& s,int start,int end)
{if(start>end) return false;if(s[start]=='0' && start!=end) //0開頭的數字不合法{return false;}int num=0;for(int i=start;i<=end;i++){if(s[i]>'9' ||s[i]<'0')//遇到非數字字符不合法{return false;}num =num*10+(s[i]-'0');if(num>255) return false;}return true;
}

完整代碼

class Solution {
public:vector<string> result;int point_nums=0;//判斷字符串s[start,end]組成的數字是否合法bool isValid(const string& s,int start,int end){if(start>end) return false;if(s[start]=='0' && start!=end) //0開頭的數字不合法{return false;}int num=0;for(int i=start;i<=end;i++){if(s[i]>'9' ||s[i]<'0')//遇到非數字字符不合法{return false;}num =num*10+(s[i]-'0');if(num>255) return false;}return true;}//這里直接對s進行修改void backtracking(string& s,int startindex){//如果逗號數量為3,判斷第四個子區間是否合法,如果合法就放入結果中if(point_nums==3){if(isValid(s,startindex,s.size()-1)){result.push_back(s);}return;}for(int i=startindex;i<s.size();i++){//子串區間:[startindex,i]if(isValid(s,startindex,i))     //判斷子串區間的子串是否合法{s.insert(s.begin()+i+1,'.'); //在i后面插入一個逗號point_nums++;backtracking(s,i+2);        //切割過的字符不能再次被切割,插入逗號之后下一個子串的起始位置發生往后移動1//回溯撤銷point_nums--;s.erase(s.begin()+i+1);     //回溯刪除逗號}//不合法的子串直接結束本層循環,只要一個子串不合法,結果就是不合法的else break;}}vector<string> restoreIpAddresses(string s) {result.clear();point_nums=0;backtracking(s,0);return result;}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377827.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377827.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377827.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

二、通過云平臺反向控制Arduino UNO R3

該篇博文是在第一篇博文(一、Arduino UNO R3將數據上傳至云平臺)的基礎上進行的 一、云平臺發送指令反向控制Arduino UNO R3 ESP12E Shield開關都推到OFF&#xff08;要不然下載會報錯&#xff09;&#xff0c;往Arduino UNO R3開發板上下載下面的代碼 這段代碼進行測試要點&…

使用MSBuild編譯FsLex項目

FsLex FsYacc微軟本身也提供了一個項目模板。但是這個項目模板是lex和yacc文件均包含。我想只適用lex&#xff0c;但是如果每次使用命令行也覺得不夠方便&#xff0c;于是還是研究了一番MsBuild的使用。 使用msbuild hellp.fsproj /v:d 可以查看整個msbuild的流程&#xff0c;非…

Python字符串格式:%vs.format

Often the string formatters in python are referred to as old style and new style. The old-style is % and .format is known as the new style. python中的字符串格式化程序通常被稱為舊樣式和新樣式。 舊樣式為&#xff05; &#xff0c;. format被稱為新樣式。 Simple…

【C++grammar】代理構造、不可變對象、靜態成員

目錄1、Delegation Constructor&#xff08;代理構造&#xff09;1. What is delegating constructor? (什么是代理構造/委托構造)2. Avoiding recursive calls of target constructors (避免遞歸調用目標ctor)3. 委托構造的好處2、不可變對象和類1、如何讓類成為“不可變類”…

paip.最新的c++ qt5.1.1環境搭建跟hello world

paip.最新的c qt5.1.1環境搭建跟hello world 作者Attilax &#xff0c; EMAIL:1466519819qq.com 來源&#xff1a;attilax的專欄 地址&#xff1a;http://blog.csdn.net/attilax 有一段時間沒接觸c了...今天下載新的qt下來研究一番.. qt的環境搭建有eclipseqtdtmingwqtl…

RFID模塊+WIFI模塊+振動傳感器+有源蜂鳴器+舵機+Arduino UNO R3所構成的門禁系統模塊

該系統模塊主要由RFID模塊WIFI模塊振動傳感器有源蜂鳴器舵機Arduino UNO R3組成的門禁系統模塊。這里使用舵機充當門鎖&#xff0c;用戶可以刷卡開門&#xff0c;也可以通過APP控制舵機狀態達到開門的效果。若有不法分子想要強行進入室內&#xff0c;對門進行撞擊或者人為的破壞…

PushManager

http://suchandalex.googlecode.com/svn/trunk/beOui/beWe/client/Classes/PushNotificationManager.m轉載于:https://www.cnblogs.com/vincent-lu/archive/2012/01/18/2325740.html

krsort_PHP krsort()函數與示例

krsortPHP krsort()函數 (PHP krsort() function) krsort() function is used to sort an associative array in descending order based on the keys, as we know that an associative array contains keys and values, this method sorts an array according to the keys. kr…

ESP12E Shield+Arduino UNO R3開發板+DHT11溫濕度模塊+雙色LED燈+有源蜂鳴器+光敏電阻模塊+I2CLCD1602液晶顯示器所構成的室內檢測系統

室內檢測系統由ESP12E ShieldArduino UNO R3開發板DHT11溫濕度模塊雙色LED燈有源蜂鳴器光敏電阻模塊I2CLCD1602液晶顯示器所構成。DHT11溫濕度模塊獲取室內溫濕度數據通過I2CLCD1602液晶顯示器進行顯示&#xff0c;另一方面通過ESP12E Shield將數據上傳至云平臺。光敏電阻進行捕…

輸入輸出函數:

一、printf函數&#xff1a;     printf("Hello World!\n");     printf("My age is %d\n",26);     int age 17;     printf("My age is %d\n",age);  %d 或 %i: 帶符號 十進制整數。   %o:不帶符號 八進制整數。   %x:…

leetcode 202. 快樂數 思考分析(哈希集合與雙指針解)

1、題目 編寫一個算法來判斷一個數 n 是不是快樂數。 「快樂數」定義為&#xff1a;對于一個正整數&#xff0c;每一次將該數替換為它每個位置上的數字的平方和&#xff0c;然后重復這個過程直到這個數變為 1&#xff0c;也可能是 無限循環 但始終變不到 1。如果 可以變為 1&am…

五、線性回歸和多項式回歸實現

官網API 一、線性回歸 針對的是損失函數loss faction Ⅰ、Lasso Regression 采用L1正則&#xff0c;會使得w值整體偏小&#xff1b;w會變小從而達到降維的目的 import numpy as np from sklearn.linear_model import Lasso from sklearn.linear_model import SGDRegresso…

JavaScript中的地圖與對象

JavaScript對象與地圖 (JavaScript Objects vs Maps) Objects are super popular in JavaScript so its not a term you are hearing for the first time even if youre a novice JS developer. Objects, in general, are a very common data structure that is used very ofte…

深發展銀行編碼器(解剖)

電池拆下來&#xff0c;再裝上&#xff0c;還能繼續用下&#xff0c;不會被重置 轉載于:https://www.cnblogs.com/ahuo/archive/2012/01/25/2329485.html

關于$.getJson

這是一個Ajax函數的縮寫&#xff0c;這相當于: 123456$.ajax({dataType: "json",url: url,data: data,success: success});數據會被附加到一個查詢字符串的URL中&#xff0c;發送到服務器。如果該值的data參數是一個普通的對象&#xff0c;它會轉換為一個字符串并使用…

leetcode 1. 兩數之和 思考分析

1、題目 給定一個整數數組 nums 和一個目標值 target&#xff0c;請你在該數組中找出和為目標值的那 兩個 整數&#xff0c;并返回他們的數組下標。 你可以假設每種輸入只會對應一個答案。但是&#xff0c;數組中同一個元素不能使用兩遍。 2、思考分析 雙for循環的時間復雜度…

六、邏輯回歸

一、何為邏輯回歸 邏輯回歸可以簡單理解為是基于多元線性回歸的一種縮放。 多元線性回歸y的取值范圍在(-∞&#xff0c;∞)&#xff0c;數據集中的x是準確的一個數值。 用這樣的一個數據集代入線性回歸算法當中會得到一個模型。 這個模型所具備的功能就是當有人給這個模型一個…

C# 調用Windows API實現兩個進程間的通信

使用Windows API實現兩個進程間&#xff08;含窗體&#xff09;的通信http://blog.csdn.net/huangxinfeng/article/details/5513608 從C#下使用WM_COPYDATA傳輸數據說到Marshal的應用http://www.cnblogs.com/jiangyh-is-me/archive/2006/06/05/417381.html 問題解決&#xff1a…

如何在Golang中返回錯誤?

In Golang, we return errors explicitly using the return statement. This contrasts with the exceptions used in languages like java, python. The approach in Golang to makes it easy to see which function returns an error? 在Golang中&#xff0c;我們使用return…

leetcode 383. 贖金信 思考分析

題目 給定一個贖金信 (ransom) 字符串和一個雜志(magazine)字符串&#xff0c;判斷第一個字符串 ransom 能不能由第二個字符串 magazines 里面的字符構成。如果可以構成&#xff0c;返回 true &#xff1b;否則返回 false。 (題目說明&#xff1a;為了不暴露贖金信字跡&#x…