1. 程式人生 > 資訊 >三部門:到 2025 年在具備條件的地區基本實現村村通快遞

三部門:到 2025 年在具備條件的地區基本實現村村通快遞

/**
 * 返回 所有的 有效的 IP 地址
 */
class Solution {
    int count = 4;
    List<String> segments = new LinkedList<>();
    List<String> result;    

    public List<String> restoreIpAddresses(String s) {
        result = new ArrayList<String>();
        backtrack(s, 0, 0);
        
return result; } public void backtrack(String s, int startIndex, int pointNum) { // 明確分割為四段 故不能用startIndex移動到s的尾部作為回溯停止的標準 if (pointNum == count) { if (startIndex == s.length()) { StringBuilder ipAddress = new StringBuilder(); for (int
i = 0; i < count; i++) { ipAddress.append(segments.get(i)); if (i != count - 1) { ipAddress.append("."); } } result.add(ipAddress.toString()); } return ; }
for (int i = startIndex; i < s.length(); i++) { if (!isValid(s, startIndex, i)) continue; // 判斷[startIndex, i]是否為合法欄位 segments.add(s.substring(startIndex, i+1)); pointNum ++; backtrack(s, i + 1, pointNum); pointNum --; segments.remove(segments.size() - 1); } } // 判斷s[startIndex, i]區間的字串是否為合理 public boolean isValid(String s, int left, int right) { if (left > right) return false; if (s.charAt(left) == '0' && left != right) return false; // 除了"0" 其餘不能以"0"開頭 int num = 0; for (int i = left; i <= right; i++) { if (s.charAt(i) > '9' || s.charAt(i) < '0') return false; num = num * 10 + (int)(s.charAt(i) - '0'); if (num > 255) return false; } return true; } }