题解 | #数字字符串转化成IP地址#

数字字符串转化成IP地址

https://www.nowcoder.com/practice/ce73540d47374dbe85b3125f57727e1e

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串ArrayList
     */

    // 通过回溯的方法解决
    // 1. 使用list记录路径,当遍历到末尾的时候,计算该列表的内容
    // 2. checkIp的结果
    // 3. 回溯+减枝
    public ArrayList<String> restoreIpAddresses (String s) {
        // write code here
        ArrayList<String> list = new ArrayList<>();
        List<String> dequeue = new ArrayList<>();
        dfs(list,0,dequeue,s);
        return list;
    }

    private void dfs(ArrayList<String> list,int start,List<String> dequeue,String s){
        // 出口
        if(start == s.length() && dequeue.size() ==4){
            list.add(getStringByList(dequeue));
            return;
        }

        if(dequeue.size() >4){
            return;
        }

        for(int l = start+1;l<=s.length();l++){
            String ipStr = s.substring(start,l);
            if(isValidIpString(ipStr)){
                dequeue.add(ipStr);
                dfs(list,l,dequeue,s);
                dequeue.remove(dequeue.size()-1);
            }else{
                return;
            }
        }

    }

    private boolean isValidIpString(String ipStr){
        if(ipStr.charAt(0)=='0' && ipStr.length() >1){
            return false;
        }
        int ip = Integer.valueOf(ipStr);
        return ip >=0 && ip <=255;
    }

    private String getStringByList(List<String> dequeue){
        StringBuffer sb = new StringBuffer();
        for(int i=0;i<dequeue.size();i++){
            if(i==0){
                sb.append(dequeue.get(i));
            }else{
                sb.append(".").append(dequeue.get(i));
            }
        }
        return sb.toString();
    }

}

全部评论

相关推荐

合适才能收到offe...:招聘上写这些态度傲慢的就别继续招呼了,你会发现hr和面试官挺神的,本来求职艰难就可能影响一些心态了,你去这种公司面试的话,整个心态会炸的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务