PAT乙級1012——數字分類
阿新 • • 發佈:2021-12-10
有效 IP 地址 正好由四個整數(每個整數位於 0 到 255 之間組成,且不能含有前導 0),整數之間用 '.' 分隔。
例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "[email protected]" 是 無效 IP 地址。
給定一個只包含數字的字串 s ,用以表示一個 IP 地址,返回所有可能的有效 IP 地址,這些地址可以通過在 s 中插入'.' 來形成。你不能重新排序或刪除 s 中的任何數字。你可以按 任何 順序返回答案。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/restore-ip-addresses
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
心之所向,素履以往 生如逆旅,一葦以航import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Scanner; class Solution { private List<String> ret; private LinkedList<Integer> path; private void addToRet() { StringBuilder sb = new StringBuilder(); for (Integer item : path) { sb.append(item).append("."); } ret.add(sb.deleteCharAt(sb.length() - 1).toString()); } private void solve(String s, int index) { if (index == s.length()) { if (path.size() == 4) { addToRet(); } return; } if (path.size() == 4) { return; } int num = 0; for (int i = index; i < s.length(); ++i) { num = num * 10 + s.charAt(i) - '0'; if (num >= 0 && num <= 255) { path.offerLast(num); solve(s, i + 1); path.pollLast(); if (num == 0) { break; } } else { break; } } } public List<String> restoreIpAddresses(String s) { this.ret = new ArrayList<>(); this.path = new LinkedList<>(); solve(s, 0); return this.ret; } public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { new Solution().restoreIpAddresses(in.next()).forEach(System.out::println); } } }