leetcode-93-复制IP地址

 

 

/*给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。

    示例:

    输入: "25525511135"
    输出: ["255.255.11.135", "255.255.111.35"]*/
public static void main(String[] args) { List<String> dest = new ArrayList<>(); List<String> tmp = new ArrayList<>(); backTrack("0279245587303", 0, tmp, dest); System.out.println(JSONObject.toJSONString(dest)); } public static void backTrack(String src, int curPos, List<String> tmp, List<String> dest) { if (tmp.size() == 4) { dest.add(tmp.get(0) + "." + tmp.get(1) + "." + tmp.get(2) + "." + tmp.get(3)); return; } if (tmp.size() == 3) { String str = src.substring(curPos); if (str.length() > 3) { // 这块在编码的时候忽略,导致integer时溢出 return; } if (Integer.parseInt(str) <= 255) { if (str.length() > 1 && str.substring(0, 1).equals("0")) { //第一次写时忽略了该情况,并注意字符串的比较 return; } tmp.add(str); backTrack(src, src.length(), tmp, dest); tmp.remove(tmp.size() - 1); } return; } for (int i = 1; i <= 3; i++) { if (curPos + i >= src.length()) { return; } String str = src.substring(curPos, curPos + i); if (str.length() > 1 && str.substring(0, 1).equals("0")) { return; } if (Integer.parseInt(str) > 255) { return; } tmp.add(str); backTrack(src, curPos + i, tmp, dest); tmp.remove(tmp.size() - 1); } }

  

经典回溯法解题

 

参考:https://leetcode-cn.com/problems/restore-ip-addresses/submissions/

 

posted on 2019-12-17 20:50  wangsong412  阅读(202)  评论(0编辑  收藏  举报