LeetCode Restore IP Addresses(回溯法)

来源:互联网 发布:java电商项目视频教程 编辑:程序博客网 时间:2024/05/01 13:50

题意:给出一个由数字组成的字符串,求其能表示的ip地址列表 

注意不能有前缀0,如010

思路:每次操作时,有两种情况,一种是添加点,一种是将其作为当前数的后序数。

在小数点的个数超过3时,递归退出。

如果小数点的个数为3,并且当前字符串的查找起点与字符串长度一样时,说明找到一种可行的ip地址。

具体代码如下:

public class Solution{    private void backtrack(String s, int start, int dotNum, int curNum, String sb, List<String> ans)    {        if (dotNum > 3) return;        if (start == s.length()) {            if (dotNum == 3 && sb.charAt(sb.length() - 1) != '.') {                ans.add(sb);            }            return;        }        if (!sb.isEmpty() && sb.charAt(sb.length() - 1) != '.') {            backtrack(s, start, dotNum + 1, 0, sb + ".", ans);        }        if (curNum == 0 && s.charAt(start) == '0') {            if (start < s.length() - 1) backtrack(s, start + 1, dotNum + 1, 0, sb + "0.", ans);            else backtrack(s, start + 1, dotNum, 0, sb + "0", ans);            return;        }        int temp = curNum * 10 + s.charAt(start) - '0';        if (temp <= 255) {            backtrack(s, start + 1, dotNum, temp, sb + s.charAt(start), ans);        }    }    public List<String> restoreIpAddresses(String s)    {        List<String> ans = new ArrayList<>();        StringBuilder sb = new StringBuilder();        backtrack(s, 0, 0, 0, "", ans);        return ans;    }}


0 0