0
点赞
收藏
分享

微信扫一扫

2022.04.07(LC_47_全排列Ⅱ)

勇敢的趙迦禾 2022-04-13 阅读 20
java

 方法:回溯

class Solution {
    List<String> ans = new ArrayList<>();
    public List<String> restoreIpAddresses(String s) {
        backtracking(s, 0, 0);
        return ans;
    }
    public void backtracking(String s, int startIndex, int pointNum) {
        if (pointNum == 3 && isValid(s, startIndex, s.length() - 1)) {
            ans.add(s);
            return;
        }
        for (int i = startIndex; i < s.length(); i++) {
            if (!isValid(s, startIndex, i)) continue;
            //插入圆点
            s = s.substring(0, i + 1) + "." + s.substring(i + 1);
            pointNum++;
            //插⼊圆点之后下⼀个⼦串的起始位置为i + 2
            backtracking(s, i + 2, pointNum);
            //回溯删掉圆点
            pointNum--;
            s = s.substring(0, i + 1) + s.substring(i + 2);
        }
    }
    public boolean isValid(String s, int start, int end) {
        if (s == null || s.length() == 0) return false;
        if (start > end) return false;
        //含前导零,不符合
        if (start < end && s.charAt(start) == '0') return false;
        String str = s.substring(start, end + 1);
        long num = Long.parseLong(str);
        //不位于0-255,不符合
        if (num < 0 || num > 255) return false;
        return true;
    }
}
举报

相关推荐

0 条评论