题解 | #表示数字#

表示数字

https://www.nowcoder.com/practice/637062df51674de8ba464e792d1a0ac6

s1 = input()

'''
数字的位置有6种情况
情况0:开始位,例中的2和9是这种情况,判断方法:第1个元素必然属于情况0,
情况1:中间位,例中的3是这种情况
情况2:终止位,例中的4和0是这种情况
情况3:单独数字,例中的3是这种情况
情况4:第一位整数,必然要在之前插入
情况5:最后一位整数。必然要在之后插入
使用insert插入"*"时,不同的情况,插入的索引不同
情况0:插入索引和数字索引一样
情况1:不插入
情况2:插入索引再原数字索引上+1
情况3:需要插入两次,第一次插入原数字索引,第二次插入原数字索引+1
情况4:插入索引和数字索引一样
情况5:插入索引再原数字索引上+1
插入:为保证插入后不影响索引位置,需要先去重,然后从大索引到小索引的顺序插入
'''

# 先或取整数的索引
number_index = []
str_list = []
for index, value in enumerate(s1):
    str_list.append(value)
    if value.isdigit():
        number_index.append(index)
# 判断每个整数分别属于哪种情况

insert_index = []
if len(number_index) > 0:
    # 情况4,第1个整数
    insert_index.append(number_index[0])
    # 情况5,最后1个整数
    insert_index.append(number_index[-1]+1)

    for i in range(1, len(number_index) - 1):
        # 情况0:1、第一个元素。2、满足number_index[i] - number_index[i - 1] != 1 and number_index[i + 1] - number_index[i] == 1
        if number_index[i] - number_index[i - 1] != 1 and number_index[i + 1] - number_index[i] == 1:
            insert_index.append(number_index[i])
        # 情况1:满足number_index[i] - number_index[i - 1] == 1 and number_index[i + 1] - number_index[i] = 1
        if number_index[i] - number_index[i - 1] == 1 and number_index[i + 1] - number_index[i] == 1:
            pass
        # 情况2:满足number_index[i] - number_index[i - 1] == 1 and number_index[i + 1] - number_index[i] != 1
        if number_index[i] - number_index[i - 1] == 1 and number_index[i + 1] - number_index[i] != 1:
            # 注意,情况2的插入索引要在原基础上+1
            insert_index.append(number_index[i] + 1)
        # 情况3:满足number_index[i] - number_index[i - 1] != 1 and number_index[i + 1] - number_index[i] != 1
        if number_index[i] - number_index[i - 1] != 1 and number_index[i + 1] - number_index[i] != 1:
            # 注意,情况3有两个插入索引,一个是原来索引,一个是原来索引+1
            insert_index.append(number_index[i])  # 原来索引
            insert_index.append(number_index[i] + 1)  # 原来索引+1
    # 情况3还有一种最后一位数字和第一位的情况,需要单独考虑:
    for i in range(-2, -1):  # 注意这里的range范围
        if number_index[i + 1] - number_index[i] != 1:
            insert_index.append(number_index[i + 1])  # 原来索引
            insert_index.append(number_index[i + 1] + 1)  # 原来索引+1
    for i in range(1):
        if number_index[i + 1] - number_index[i] != 1:
            insert_index.append(number_index[i])  # 原来索引
            insert_index.append(number_index[i] + 1)  # 原来索引

    # 去重然后排序,要按照从后到前的顺序排序
    insert_index = list(set(insert_index))
    insert_index.sort(reverse=True)
    # print(insert_index)
    for i in insert_index:
        str_list.insert(i, "*")
print("".join(str_list))

全部评论

相关推荐

02-01 12:05
复旦大学 Java
腾讯的提前批大概率应该是没有笔试的,但是这个时候有相当部分的同学简历估计都没有准备好,没准备好的同学也不用急,大部分都是3月之后开,这个时候开的绝大多数都是神仙打架,问的东西也比较难,打算投递的同学也多看下计算机网络和操作系统,腾讯对这部分的知识问的比较多。另外多刷下牛客的热门题库,刷题注意刷ACM模式,和牛客的周赛题,腾讯有的部门会从这里面出原题。我是@程序员花海关注我,带你了解更多校招资讯!
程序员花海:还没有来得及准备的同学可以看下学习路线:https://www.nowcoder.com/discuss/824693499982315520?sourceSSR=users算法题:https://www.nowcoder.com/feed/main/detail/20e7a999fa04485b88340a274411ca0d?sourceSSR=users八股文:https://www.nowcoder.com/discuss/833102362771251200?sourceSSR=users简历书写方式:https://www.nowcoder.com/discuss/839907820706205696?sourceSSR=users都是以前在牛客发的文章~
软开人,秋招你打算投哪些...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务