java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE, JavaME, JavaSE)的总称。本站提供基于Java框架struts,spring,hibernate等的桌面应用、web交互及移动终端的开发技巧与资料

保持永久学习的心态,将成就一个优秀的你,来 继续搞起java知识。

原题链接:93. Restore IP Addresses
【思路】
本题考察回溯算法。本解法采用回溯算法,将ip分为4个字段,需要注意下面几点:
1. 每个字段的值均不超过255,且不以0为开头(单独的0允许)。否则,剪枝。
2. 如果4个字段都加入到temp中之后,四个字段长度之和不等于s.length() - 1,那么不可加入到result中。

public List<String> restoreIpAddresses(String s) {
        List<String> result = new ArrayList<String>();
        dfs(result, s, "", 0, "", 0);
        return result;
    }
    private void dfs(List<String> result, String s, String temp, int curIndex, String curSum, int times) {
        if (times < 4 && times > 0) {
            temp = temp + curSum + &#39;.&#39;;
            curSum = "";
        } else if (times == 4 && curIndex == s.length()) {  //得到4个字段过后,如果curIndex不小于s.length(),那么ip合法
            result.add(temp + curSum);
        }
        for (int i = curIndex; i < s.length() && times < 4; i++) {
            curSum = curSum + s.charAt(i);
            if (curSum.length() > 1 && curSum.startsWith("0") || Integer.parseInt(curSum) > 255) //该字段ip不合法,剪枝
                break;
            dfs(result, s, temp, i + 1, curSum, times + 1);
        }
    }

147 / 147 test
cases passed. Runtime: 4
ms Your runtime beats 55.34% of javasubmissions.
欢迎优化!
BacktrackingJavaleetcode

因为水平有限,难免有疏忽或者不准确的地方,希望大家能够直接指出来,我会及时改正。一切为了知识的分享。

后续会有更多的精彩的内容分享给大家。