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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串ArrayList
     */
     ArrayList<String> ans = new ArrayList<>();
    public ArrayList<String> restoreIpAddresses (String s) {
        // write code here
        if (s.length() == 0) return ans;
        backTrace(s, 0, new ArrayList<>());
        return ans;
    }

    private void backTrace(String s, int index, ArrayList<String> sb) {
        if (index == s.length()) {
            if (sb.size() == 4) {
                StringBuilder str = new StringBuilder();
                for (int i=0; i<sb.size(); i++) {
                    str.append(sb.get(i));
                    str.append(".");
                }
                str.deleteCharAt(str.length()-1);
                ans.add(str.toString());
            }
            return;

        }
        
        for (int j=1; j<=3; j++) {
            if (j + index > s.length()) break; 
            String sub = s.substring(index, index+j); // 构造子串
            if (!valid(sub)) continue;
            sb.add(sub);
            backTrace(s, index+j, sb);
            sb.remove(sb.size()-1);
        }
    }

    private boolean valid(String s) {
        if (s.length() > 1 && s.charAt(0) == '0') return false;
        int number = 0;
        for (int i=0; i<s.length(); i++) {
            int digit = s.charAt(i) - '0';
            number = number * 10 + digit;
        }
        return number >= 0 && number <= 255;
    }
}

全部评论

相关推荐

浩浩没烦恼:一二面加起来才一个小时? 我一面就一个小时多了
点赞 评论 收藏
分享
09-17 19:25
已编辑
太原理工大学 游戏测试
叁六玖:公司名发我,我要这个HR带我打瓦
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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