腾讯虚拟主机,重庆网站排名优化,东莞网站外包,天元建设集团有限公司破产重组题目描述:有效 IP 地址 正好由四个整数#xff08;每个整数位于 0 到 255 之间组成#xff0c;且不能含有前导 0#xff09;#xff0c;整数之间用 . 分隔。
例如#xff1a;0.1.2.201 和 192.168.1.1 是 有效 IP 地址#xff0c;但是 0.…题目描述:有效 IP 地址 正好由四个整数每个整数位于 0 到 255 之间组成且不能含有前导 0整数之间用 . 分隔。
例如0.1.2.201 和 192.168.1.1 是 有效 IP 地址但是 0.011.255.245、192.168.1.312 和 192.1681.1 是 无效 IP 地址。
给定一个只包含数字的字符串 s 用以表示一个 IP 地址返回所有可能的有效 IP 地址这些地址可以通过在 s 中插入 . 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。 思路将字符串装入StringBuilder中对sb进行分割如果满足合法的ip地址则加上. 进行递归。 题解
private ListString res new ArrayList();
private StringBuilder path;
private int count 0;
public ListString restoreIpAddresses(String s) {path new StringBuilder(s);backtracking(0);return res;
}
private void backtracking(int i) {// 终止条件逗号的个数等于3if (count 3) {// 判断第四段字符串是否是合法的IP地址if (isValid(path, i, path.length()-1)) {res.add(path.toString());}return;}for (int j i; j path.length(); j) {// 判断是否是合法的IP地址if (isValid(path, i, j)) {// 插入逗号path.insert(j1, .);// 逗号计数器加一count;// 递归2 是因为插入了逗号所以要跳过backtracking(j2);// 回溯path.deleteCharAt(j1);// 逗号计数器减一count--;}}
}
// 判断是否是合法的IP地址
private boolean isValid(StringBuilder s,int left ,int right) {// 判断长度if (left right) {return false;}// 判断是否以0开头if (s.charAt(left) 0 left ! right) {return false;}// 判断是否在0-255之间int num 0;for (int i left; i right; i) {if (sb.charAt(i) 0 sb.charAt(i) 9) {int temp sb.charAt(i)-0;num num*10 temp;} else {return false;}}return res 0 res 255;
}