leetcode Restore IP Addresses

题目 :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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值