# 复原 IP 地址

<p>给定一个只包含数字的字符串，用以表示一个 IP 地址，返回所有可能从 <code>s</code> 获得的 <strong>有效 IP 地址 </strong>。你可以按任何顺序返回答案。</p><p><strong>有效 IP 地址</strong> 正好由四个整数（每个整数位于 0 到 255 之间组成，且不能含有前导 <code>0</code>），整数之间用 <code>'.'</code> 分隔。</p><p>例如："0.1.2.201" 和 "192.168.1.1" 是 <strong>有效</strong> IP 地址，但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 <strong>无效</strong> IP 地址。</p><p> </p><p><strong>示例 1：</strong></p><pre><strong>输入：</strong>s = "25525511135"<strong><br />输出：</strong>["255.255.11.135","255.255.111.35"]</pre><p><strong>示例 2：</strong></p><pre><strong>输入：</strong>s = "0000"<strong><br />输出：</strong>["0.0.0.0"]</pre><p><strong>示例 3：</strong></p><pre><strong>输入：</strong>s = "1111"<strong><br />输出：</strong>["1.1.1.1"]</pre><p><strong>示例 4：</strong></p><pre><strong>输入：</strong>s = "010010"<strong><br />输出：</strong>["0.10.0.10","0.100.1.0"]</pre><p><strong>示例 5：</strong></p><pre><strong>输入：</strong>s = "101023"<strong><br />输出：</strong>["1.0.10.23","1.0.102.3","10.1.0.23","10.10.2.3","101.0.2.3"]</pre><p> </p><p><strong>提示：</strong></p><ul>	<li><code>0 <= s.length <= 3000</code></li>	<li><code>s</code> 仅由数字组成</li></ul>

## template

```java
class Solution {
	private List<String> res = new ArrayList<>();

	public List<String> restoreIpAddresses(String s) {
		if (s.length() < 4)
			return res;
		backtrack(s, 0, new StringBuilder(), 0);
		return res;
	}

	private void backtrack(String s, int start, StringBuilder sb, int pointNumOfSb) {
		if (pointNumOfSb > 4)
			return;
		if (start == s.length() && pointNumOfSb == 4) {
			res.add(sb.toString().substring(1));
			return;
		}
		for (int i = start; i < s.length() && i - start < 3; i++) {
			String x = s.substring(start, i + 1);
			if (x.charAt(0) == '0' && x.length() > 1)
				return;
			if (Integer.parseInt(x) <= 255) {
				sb.append("." + x);
				backtrack(s, i + 1, sb, pointNumOfSb + 1);
				sb.delete(sb.lastIndexOf("."), sb.length());
			}
		}
	}
}
```

## 答案

```java

```

## 选项

### A

```java

```

### B

```java

```

### C

```java

```