leetcode Restore IP Addresses

来源:互联网 发布:java 解压加密rar文件 编辑:程序博客网 时间:2024/06/08 15:59

题目 :Given a string containing only digits, restore it by returning all possible valid IP address combinations.

For example:
Given "25525511135",

return ["255.255.11.135", "255.255.111.35"]. (Order does not matter)


思路:

体思路就是深度优先搜索,首先看到边界条件没,如果没有,就深度搜索:

一开始搜索1个字符和剩下的字符串,判断该字符的index是否越界了,对于剩下的字符串递归;

然后是2个字符和剩下的字符串,判断这2个字符的首字符是否是0,对于剩下的字符串递归;

然后是3个字符和剩下的字符串,判断这3个字符的首字符是否是0,并且这3个字符组成的数字是否小于等于255,对于剩下的字符串递归。


class Solution {public:         vector<string> restoreIpAddresses(string s) {         vector<string> restoreIp;         string ip;         if(s.length()>12) return restoreIp;         dfsIp(s,0,0,ip,restoreIp);         return restoreIp;    }    //s数字字符串串    //start表示当前dfs到的s的下标    //ipNum表示ip地址的第几个数字,4.3.2.1里面4对应的ipNum为1,3对应的是2...    //ip记录可能的ip临时值    //restoreIp记录所有可能的ip    void dfsIp(string s, int start, int ipNum, string ip, vector<string> &restoreIp){        //判断结束条件,合理的情况        if(start == s.size() && ipNum == 4){            ip.resize(ip.size()-1); //去掉最后多于的.            restoreIp.push_back(ip);            return;        }        //判断结束条件,不合理的情况        if((s.size()-start)>(4-ipNum)*3) return ;        if((s.size()-start)<(4-ipNum)) return ;        //核心算法,dfs深度优先遍历,        //首先遍历ip字段长度为1的情况,其次遍历为2,最后遍历字段长度为3的        int num=0;        for(int i=start; i<start+3; i++){            num = num*10 + (s[i]-'0');            if(num<=255){                ip += s[i];                dfsIp(s,i+1,ipNum+1,ip+'.',restoreIp);            }            if(num==0){                break;            }        }    }};



0 0