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

数字字符串转化成IP地址

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

import java.util.*;


public class Solution {
    /**
     * 
     * @param s string字符串 
     * @return string字符串ArrayList
     */
    public ArrayList<String> restoreIpAddresses (String s) {
        // write code here
        if (s.length() > 12) {
            return null;
        }
        StringBuilder sb = new StringBuilder(s);
        doRestoreIpAddresses(sb, 1);
        return ans;
    }
    
    ArrayList<String> ans = new ArrayList<>();

  	// 套用回溯算法模板
    public void doRestoreIpAddresses(StringBuilder s, int m) { // 回溯暴力算法,还要很多地方没有剪枝
        // write code here
        String[] nums = s.toString().split("\\.");
        if (nums.length > 4) { // 剪枝
            return;
        }
        if (validateIPv4(s.toString())) { // 结束条件
            ans.add(String.copyValueOf(s.toString().toCharArray()));
            return;
        }

        for (int i = m; i < s.length(); i++) { // 回溯
            s.insert(i, "."); 
            doRestoreIpAddresses(s, i + 2);
            s.replace(i, i + 1, "");

        }
    }
    
     public boolean validateIPv4(String IP) {
        String[] nums = IP.split("\\.");
        if (nums.length !=  4) {
            return false;
        }
        for (String x : nums) {
            // 0-255:
            if (x.length() == 0 || x.length() > 3) return false;
            // 0的情况
            if (x.charAt(0) == '0' && x.length() != 1) return false;
            // 大于255
            if (Integer.parseInt(x) > 255) return false;
        }
        return true;
    }
}
全部评论

相关推荐

11-17 11:15
门头沟学院 Java
金山办公终于发offer了,但薪资和平台都不如已有的offer打算拒了,A不了薪资,不满意直接拒了,留给需要的人嘿嘿嘿时间线:10.14线下一面&nbsp;,10.23线上二面,下午发测评,11月1日HR面,11月14日电话谈薪,11月17日直接发offer
star__plat...:好兄弟干的好啊,解气。金山第一次笔难度高的离谱,第二次简单的离谱全A了,用人部门筛选中估计最后还是要挂我,就这今早智联招聘还给我发信息让我投
offer帮选
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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