LeetCode 93. 復原IP地址(Restore IP Addresses)


題目描述

 

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

示例:

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

 

解題思路

 

利用回溯法的思想,從字符串第一個字符開始,分別檢查從當前字符開始的第1、2、3位組成的數,若該數符合要求即小於256則加入到結果IP中,然后再從當前數的后一位置遞歸向后尋找。若遍歷到第四個數,則判斷最后幾位組成的數是否滿足要求,符合則加入到最后的集合中。注意當遇到當前數的起始位是0時,僅將0加入到字符串中就停止當前數的尋找,因為以‘0’開頭的任何字符串轉化成的數都會去掉前面的‘0’

 

代碼

 

 1 class Solution {
 2 public:
 3     vector<string> restoreIpAddresses(string s) {
 4         vector<string> res;
 5         findIp(s, 0, 0, "", res);
 6         return res;
 7     }
 8     void findIp(string s, int f, int idx, string ip, vector<string> &res){
 9         if(idx == 3){
10             if(s.size() - 1 - f < 3){
11                 if(s[f] == '0' && f != s.size() - 1) return;
12                 int num = stoi(s.substr(f, s.size() - f)); 
13                 if(num < 256){
14                     ip += to_string(num);
15                     res.push_back(ip);
16                 }
17             }
18         }
19         else{
20             for(int i = 1; i <= 3; i++){
21                 if(f + i >= s.size()) break;
22                 int num = stoi(s.substr(f, i));
23                 if(num < 256)
24                     findIp(s, f + i, idx + 1, ip + to_string(num) + ".", res);
25                 if(s[f] == '0' && i == 1) break;
26             }
27         }
28     }
29 };

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM