力扣-复原IP-93
DFS+回溯
import org.junit.Test; import java.util.ArrayList; import java.util.List; public class leetcode93 { int segCount = 4; // 一共有4段 List<String> res = new ArrayList<>(); // 保存所有可能出现的情况 int[] segments = new int[segCount]; // 保存某一个情况 public List<String> restoreIpAddresses(String s) { dfs(s, 0, 0); return res; } // segId表示分段的编号,segStart表示s中的下标 public void dfs(String s, int segId, int segStart) { if (segId == segCount) { // 已经有4段 if (segStart == s.length()) { // 字符串的长度已经用完了 StringBuilder ipAddr = new StringBuilder(); for (int i = 0; i < segCount; i++) { ipAddr.append(segments[i]); if (i != segCount - 1) { ipAddr.append('.'); } } res.add(ipAddr.toString()); } return; } // 如果未找到4段IP,就已经遍历完字符串,提前回溯 if (segStart == s.length()) { return; } // 如果当前数字为0,那么它只能是0 if (s.charAt(segStart) == '0') { segments[segId] = 0; dfs(s, segId+1, segStart+1); } // 对于一般情况 int addr = 0; for (int segEnd = segStart; segEnd < s.length(); segEnd++) { addr = addr * 10 + (s.charAt(segEnd) - '0'); if (addr > 0 && addr <= 255) { segments[segId] = addr; dfs(s, segId+1, segEnd+1); } else{ break; } } } @Test public void test() { String s = "25525511135"; List<String> strings = restoreIpAddresses(s); System.out.println(strings); } }
作者:Ryanjie
出处:http://www.cnblogs.com/ryanjan/
本文版权归作者和博客园所有,欢迎转载。转载请在留言板处留言给我,且在文章标明原文链接,谢谢!
如果您觉得本篇博文对您有所收获,觉得我还算用心,请点击右下角的 [推荐],谢谢!