手机版 | 登陆 | 注册 | 留言 | 设首页 | 加收藏
当前位置: 网站首页 > python教程 > 文章 当前位置: python教程 > 文章

Python笔试题库python笔试题 数组 如果存在每位数相加之和相等

时间:2022-08-07    点击: 次    来源:网络    作者:佚名 - 小 + 大

Python笔试题库python笔试题 数组 如果存在每位数相加之和相等


下载地址

https://share.weiyun.com/gcOeOitM


资料目录
100道Python面试题
5个等待挑战的Python面试题(附答案)
python基础面试题三十一道(附详细答案)
python面试基础题十大陷阱(附详细答案)
python面试真实笔试题带答案(1-10题)
Python面试中必看的8个必考问题(附详细答案)
Python爬虫开发面试常见问题(附详细答案)
Python爬虫面试题(附详细答案)
python数据分析师面试题选(附详细答案)
Python数据挖掘试题四十道(附答案)
阿里巴巴Python开发工程师面试题(附答案)
常见的25个python面试问答(附详细答案)
Python经典面试题和答案解析
四类必须提前准备的Python程序员面试问题
出现频率最高的python面试题集锦(附详细答案)
珍藏版Python web后端开发工程师面试试题
尚观python第一阶段考试(面试真题模拟)
老男孩Python全栈7期练习题(面试真题模拟)
傲梦python笔试题及答案
python 笔试题(附带答案)
Python题库(已收录100道真题)
python第一阶段考试题
python基础试题(含答案)
PYTHON测试题和答案
Python考试题复习知识点试卷试题
python期末考试复习试卷

举例

还原ip地址
题目要求
一个字符串,里面存储的是ip地址,但是.(点)被删除了,只剩下数字,请编写算法,还原这个ip地址,如果可以还原成多个,请逐一列出
输入: 192168119130
输出: ['192.168.119.130']

输入: 101224010
输出:['10.12.240.10', '10.122.40.10', '10.122.401.0', 
      '101.2.240.10', '101.22.40.10', '101.22.401.0', 
      '101.224.0.10']
      
输入: 101226010
输出: ['10.122.60.10', '101.22.60.10', '101.226.0.10']
思路分析
一个ip地址有四段,每段的范围是0~255,可以分四次从输入字符串中截取字符串,第一次截取时,必然是从字符串索引为0的位置开始,那么可以截取的长度是1, 2, 3。 这一段截取后,进行第二次截取,第二次截取的开始位置取决于第一次截取结束的位置,如果第一次截取的长度是2,那么第二次就要从索引为2的位置上开始截取,可以截取的长度是1, 2, 3, 第三次和第四次做同样的操作,这么一分析,你就应该想到用递归函数来做了。
需要考虑的情况是:
截取后的每一段,如果是以0开头,那么这一段只能是0,总不能出现10.21.01.23的ip地址吧,01是什么鬼
截取后的每一段,其值大小不能超过255
如果截取后剩余的部分长度超过剩余几段理论上的最大长度,那么这个截取就是不合理的,比如192168119130, 第一段只截取1,那么剩余部分92168119130 的长度是11,后面三段最长也就是9,所以这样截取是不合理的
如果截取后余下的部分长度是0,也是不合理的
如果截取后余下的部分长度比余下几段理论上的最小长度还小,也是不合理的,比如截取后余下部分长度是2,可是还有3段需要截取,这样就是不合理的
示例代码
# coding=utf-8


def restore_ip(ip):
    retsection_lst = restore_ip_ex(ip, len(ip), 0, 4)
    return ['.'.join(item) for item in retsection_lst]


def restore_ip_ex(ip, ip_len, start_index, k):
    if k == 0:
        return [[]]

    if ip_len > 20 or ip_len < 4:
        return []

    section_lst = []
    for i in range(1, 4):
        # 如果截取后剩余的部分长度超过剩余几段理论上的最大长度,那么这个截取就是不合理的
        # 如果剩余长度为0也是不合理的
        rest_len = ip_len - i - start_index
        if (rest_len == 0 and k != 1) or rest_len > (k-1)*3 or rest_len < k-1:
            continue

        section = ip[start_index:start_index+i]
        # 如果某段以0开头,那么这一段就是只能是0,否则就会出现1.012.240.10这种情况,012显然是不合理的
        if section[0] == '0' and len(section) != 1:
            continue

        if int(section) > 255:
            continue

        # 截取下一段
        res_lst = restore_ip_ex(ip, ip_len, i+start_index, k-1)
        for item in res_lst:
            item.insert(0, section)

        section_lst.extend(res_lst)

    return section_lst


if __name__ == '__main__':
    print restore_ip("192168119130")
    print restore_ip("101224010")
    print restore_ip("1111")
    print restore_ip("101226010")

上一篇:软件测试python笔试题目及答案Python笔试题纸牌互换游戏

下一篇:没有了

推荐阅读
声明 | 联系我们 | 关于我们
备案ICP编号  |   QQ:2151239526  |  地址:北京市东城区  |  电话:16605168200  |