ICT暑期学校机试题整理

本文介绍了LeetCode第93题的解题思路和完整代码,通过递归法解决复原IP地址的问题,探讨了剪枝条件和循环边界的控制,适合准备面试和学习算法的读者。
摘要由CSDN通过智能技术生成
1.题目:复原IP地址(题目来源:LeetCode 93题

给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。

示例 1:

输入:s = "25525511135"
输出:["255.255.11.135","255.255.111.35"]

示例 2:

输入:s = "0000"
输出:["0.0.0.0"]
2.个人理解:

ICT一直是自己向往读研的研究所,毕竟计算所嘛~懂的都懂。但参加过计算所两个实验室的机试与面试后,认识到很多优秀的同学,深知自己在CS这条道路上还有很长的路要走。步入正题,当时看到这道题,笔者第一反应是剪枝法,剪枝的条件为ip地址xxx.xxx.xxx.xxx中的满足xxx > 0 && xxx <=255,但是由此进行暴力枚举然后根据剪枝条件进行剪枝时,如何控制循环边界,这就是笔者当时此题不能AC的原因。而今日参考了Leetcode解析时发现,此题还可以使用递归法,并且巧妙的使用 sed_id,seg_start,seg_count=4作为递归控制条件,当如下满足时:

	// 核心算法
    int addressPart = 0;
    for (int i = seg_start; i < s.size(); i++) {
   
    	// 由递归枚举每一种可能
        addressPart = addressPart * 10 + (s[i] - '0');
        // 满足`xxx > 0 && xxx <=255`条件
        if (addressPart > 0 && addressPart <= 255) {
   
            segments
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值