LeetCode 93.复原IP地址

思路

有效的IP地址是由4个0~255之间的整数组成,并且每个整数不能包含前导0。

因为我们每次都需要在字符串中间加入.号,所以我们可以判断.号的数量,如果数量等于3,那么就已经分割出来了四个整数,那么就可以作为终止条件。

为了能够快速排查出不符合条件的情况,所以我们每次得到一个整数之后都需要进行判断,判断其是否没有前导0,并且是否在0~255之间。

代码

复制代码

java

代码解读

复制代码

class Solution { List<String> result; public List<String> restoreIpAddresses(String s) { result = new ArrayList<>(); StringBuilder sb = new StringBuilder(s); backtracking(sb,0,0); return result; } public void backtracking(StringBuilder s ,int startIndex, int dotNum){ if(dotNum == 3){ if(check(s,startIndex,s.length()-1)){ result.add(s.toString()); return; } } for(int i=startIndex;i<s.length();i++){ if(check(s,startIndex,i)){ s.insert(i+1,'.'); dotNum++; backtracking(s,i+2,dotNum); dotNum--; s.deleteCharAt(i+1); }else break; } } //判断每次分割出来的整数是否合法 public boolean check(StringBuilder s, int start,int end){ if(start>end) return false; //如果存在前导0,那么不合法 if(s.charAt(start)=='0' && start!=end) return false; int num=0; for(int i=start;i<=end;i++){ int temp = s.charAt(i)-'0'; num=num*10+temp; if(num>255) return false; } return true; } }

相关推荐
顶点多余29 分钟前
9.16 面试总结
linux·面试·职场和发展
不会就选b42 分钟前
算法日常・每日刷题--<贪心>15
算法
鹿角片ljp1 小时前
Prompt Cache、Token 成本与 Plan Compiler 的工程设计
java·python·算法
萧西待水7 小时前
奥赛一本通 1447 靶形数独
算法·深度优先
泯泷9 小时前
那段文字是谁删的?Yjs 14 正式版之前,一套删除归属方案的实现与边界
前端·javascript·算法
hold?fish:palm10 小时前
34 合并K个升序链表
javascript·算法·链表
Navigator_Z12 小时前
LeetCode //C - 1252. Cells with Odd Values in a Matrix
c语言·算法·leetcode
语戚13 小时前
力扣 1621. 大小为K的不重叠线段的数目:动态规划(Java 实现)
java·算法·leetcode·动态规划·力扣·dp
青山木14 小时前
Hot 100 --- 最长有效括号
java·数据结构·算法·leetcode·动态规划
这料鬼有毒15 小时前
二刷hot100-1143.最长公共子序列
算法·leetcode·动态规划