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

相关推荐
yi0112 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
YangYang9YangYan3 小时前
2027 秋招|数据科学与大数据技术面试项目价值回答思路,告别纯代码描述
大数据·面试·职场和发展
灯澜忆梦5 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
小蒋观天下5 小时前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
Evand J5 小时前
【电机滤波例程5】渐消因子自适应扩展卡尔曼滤波(EKF),MATLAB。PMSM负载突变下的状态估计。附下载链接
算法·matlab
H.莓飛5 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
好想像大佬一样能够ak所有6 小时前
Leetcode35.搜索插入位置
数据结构·算法·leetcode
aqiu1111116 小时前
【C++算法打怪专栏】LeetCode 165. 比较版本号(双指针与字符串流法)
c++·算法·leetcode
黄金龙PLUS6 小时前
如何基于置换算法来设计对称加密算法
算法·网络安全·密码学·哈希算法·同态加密
不会就选b6 小时前
算法日常・每日刷题--<动态规划>14
算法