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 };

 

posted @ 2018-07-31 15:07  FlyingWarrior  阅读(2406)  评论(0编辑  收藏  举报