[LeetCode] Restore IP from string 从字符串恢复IP地址

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)

思路:用递归的方法。IP地址是点分十进制,一共有4个part,每个part大于等于0,小于等于255。递归时,要传递part number,当part number等于4的时候,说明IP地址恢复完成。另外,要注意,每个part的范围必须是在[ 0, 255 ]内,而且要避免出现以0开头的part,比如 010是没有意思的,“0.10. 010 .1”。

代码如下:

       vector<string> restoreIpAddresses(string s) {  
       // main function
            vector<string> col;   
            string ip;   
            partitionIP(s, 0, 0, ip, col);   
            return col;   
       }  
       
       void partitionIP(string s, int startIndex, int partNum,    
       string resultIp, vector<string>& col)   
       {// utility function
            //max 3 bits per partition   
            if(s.size() - startIndex > (4-partNum)*3) return;   
            //min 1 bit per partition   
            if(s.size() - startIndex < (4-partNum)) return;  
            if(startIndex == s.size() && partNum ==4)   
            {   
                resultIp.resize(resultIp.size()-1);   
                 col.push_back(resultIp);   
                 return;   
            }   
            int num =0;   
            for(int i = startIndex; i< startIndex +3; i++)   
            {   
                 num = num*10 + (s[i]-'0');   
                 if(num<=255)   
                 {   
                      resultIp+=s[i];   
                      partitionIP(s, i+1, partNum+1, resultIp+'.', col);       
                 }    
                 if(num ==0)//0.0.0.0 valid, but need to avoid 0.1.010.01   
                 {   
                      break;   
                 }   
            }   
       }   



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值