数字字符串转IP

数字字符串转IP

题目描述

现在有一个只包含数字的字符串,将该字符串转化成IP地址的形式,返回所有可能的情况。
例如:
给出的字符串为"25525511135",
返回[“255.255.11.135”, “255.255.111.35”]. (顺序没有关系)

代码

import java.util.*;


public class Solution {
    /**
     * 
     * @param s string字符串 
     * @return string字符串ArrayList
     */
    public ArrayList<String> res = new ArrayList<>();
    public int[] seg_Digit = new int[4];
    public ArrayList<String> restoreIpAddresses (String s) {
        // write code here
        dfs(s,0,0);
        return res;
        
        
    }
    public void dfs(String s, int seg_Id, int p){
        //当已经完成4段且使用了全部字符时,记录结果
        if(seg_Id == 4){
           if(p == s.length()){
               StringBuilder sb  = new StringBuilder();
               for(int i=0; i<4; i++){
                   sb.append(seg_Digit[i]);
                   if(i < 3){
                       sb.append('.');
                   }
               }
               res.add(sb.toString());
           }
           return;
       }
       //当未完成4段但已经耗完字符时,无结果直接返回
       if(p == s.length()) return;
       
       //当段开头指针指向字符为0时,
       if(s.charAt(p) == '0'){
           seg_Digit[seg_Id] = 0;
           dfs(s, seg_Id+1, p+1);
           return;
       }
       
       //深度优先探索一个、两个、三个字符组成数字的结果
       int w = 0;
       //只取1-3字符组成数字,若没有3个,就去剩下的长度
       for(int i=p; i < (s.length()-p>=3?p+3:s.length()); i++){
           w = 10*w + (s.charAt(i)-'0');
           if(w>0 && w<=255){
               seg_Digit[seg_Id] = w;
               dfs(s,seg_Id+1,i+1);
           }else {
               break;
           }
       }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值