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; } }

相关推荐
leavesleo36 分钟前
DeepSeek 偷偷给你取外号?拆一下 AI 人格化背后的技术
算法
liliangcsdn1 小时前
skewness收益偏度取负因子背后逻辑的探索
人工智能·算法·机器学习
鹿角片ljp1 小时前
LeetCode 300. 最长递增子序列|从 DP O (n²) 到贪心 + 二分 O (n log n)
算法·动态规划
叠层归一研究院1 小时前
缝合维度:时空3+1结构的拓扑起源
人工智能·算法·机器学习·agi
YXXY3131 小时前
FloodFill算法
算法
OPEN-F1 小时前
C++入门教程:数组、字符串与指针入门
数据结构·c++·算法
林森lsjs2 小时前
零基础吃透二叉树:定义、遍历与高频算法 —数据结构柒
java·开发语言·数据结构·算法·二叉树
船厂电气自动化ai大模型2 小时前
AI大模型与数学·第56课 快速傅里叶变换FFT:DFT高效优化算法,图像、音频、扩散模型工程加速核心工具
数据结构·人工智能·深度学习·算法·机器学习
203号居民2 小时前
【无标题】LeetCode hot 100 —54. 螺旋矩阵
算法
烤羊腿的程序员2 小时前
前端面试知识点大全(带答案)
前端·面试·职场和发展