求一个数字字符串的所有合法的IP地址

近日在面试美团的时候手撕一道回溯法的算法题,题意如下:

给定一个数字字符串,要求将这个数字字符串进行分割,使得分割的结果为有效的IP地址。

样例输入:

25525511135

样例输出:

255.255.11.135, 255.255.111.35

 这道题其实可以看做是字符串分段问题,再输入的字符串中加入三个点,将字符串分割成四段,每一段必须合法,求所有可能的情况。目前遇到字符串的处理经验为:1、若题目问的是字符串的子序列问题首先考虑使用动态规划的方法,2、如果题目问的是求出所有可能的情况,那么首先考虑使用递归的方法。所以这道题使用递归的方法求解。

使用n表示当前已经分了几个分段,注意到此处的输入为字符串类型,那么如果想将将其转化成int类型变量的话可以先使用c_str()函数将其转化成字符数组,然后使用atoi()函数将其转化成int型数据,这样就可以和0-255这个范围进行比较了。

递归的大致思路如下:

1. 将最后的结果存入一个全局的字符串向量res中。

2. 递归的函数有四个参数,分别是剩下的字符串s,已经分段的个数n,分割过程中产生的临时结果out,结果向量res。

3. 如果已经完成了四段的分割,那么将结果push_back()入res中

4. 否则的话,下一个分段的长度为1-3,对于每一种长度,都要求大小在0-255之间,而且除了0以外不能够以0开头。如果满足条件的话。进入5。

5.递

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值