当前位置: 首页 > article >正文

笔试-排列组合

应用

一个长度为[1, 50]、元素都是字符串的非空数组,每个字符串的长度为[1, 30],代表非负整数,元素可以以“0”开头。例如:[“13”, “045”,“09”,“56”]。
将所有字符串排列组合,拼起来组成一个新字符串,输出其中最小的数字:
如果是多位数字,优先选择不以“0”开头的最小数字;
如果新拼接的字符串都是以“0”开头,则选取最小的,并把开头部分的“0”去掉再输出;
如果是单位字符0,直接输出。

实现

strings = input("请输入若干个代表非负整数的字符串,可以以“0”开头,以空格分隔:").split()
array = []
for i in strings:
    array.append(i)
# print(array)


def check_all_elements_start_with(list):
    check_result = True
    
    unnormal_num_sum = 0
    for i in list:
        if i[0] == "0":
            unnormal_num_sum += 1
    # 元素都是“0”开头
    if unnormal_num_sum == len(list):
        check_result = False
    
    return check_result

def normalize(list):
    # 每个字符串去除首位“0”
    for i in list:
        i[1:]
    
    check_result = check_all_elements_start_with(list)

    if check_result:
        return list
    else:
        normalize(list)

def PaiLie_yu_ZuHe(list):
    
    # 复制一下
    l1 = list
    # 去重
    result = set()
    # # 原始顺序加入到结果 # 测试几次发现多此一举
    # string = ""
    # for k in list:
    #     string = string + k
    # result.add(string)

    # 基于原始顺序,从左到右逐一交换位置:弟i个元素分别与后面的每个元素组成新字符串
    for i in range(0, len(l1)-1):
        for j in range(i+1, len(l1)):
            temp = l1[i]
            l1[i] = l1[j]
            l1[j] = temp
            
            string = ""
            for k in l1:
                string = string + k
            result.add(string)
            # 复原
            l1 = list
    # 基于原始顺序,从右到左逐一交换位置:弟i个元素分别与前面的每个元素组成新字符串
    for i in range(1, len(l1)):
        for j in range(0, i):
            temp = l1[i]
            l1[i] = l1[j]
            l1[j] = temp
            
            string = ""
            for k in l1:
                string = string + k
            result.add(string)
            # 复原
            l1 = list

    r = []
    for i in result:
        r.append(i)
    # print(r)
    return r

def filter_and_sort(list):
    # 筛选不是“0”开头的元素,并int化
    l = []
    for i in A:
        if i[0] != "0":
            l.append(int(i))
        
    l.sort()
    return l


# PaiLie_yu_ZuHe(array)

# 单位字符串
if len(array) == 1:
    check_result = check_all_elements_start_with(array)

    if check_result:
        # 字符串为正常数字
        print(f"最小数字为{array[0]}")
    else:
        # 字符串为不正常数字
        normalize(array)
        print(f"最小数字为{array[0]}")
# 多位字符串
else:
    A = PaiLie_yu_ZuHe(array)

    check_result = check_all_elements_start_with(A)
    
    if check_result:
        # 字符串为正常数字
        L = filter_and_sort(A)
        print(f"最小数字为{L[0]}")
    else:
        # 字符串为不正常数字
        B = normalize(A)
        L = filter_and_sort(B)
        print(f"最小数字为{L[0]}")
请输入若干个代表非负整数的字符串,可以以“0”开头,以空格分隔:08 10 2
最小数字为10082

请输入若干个代表非负整数的字符串,可以以“0”开头,以空格分隔:20 1
最小数字为120

http://www.kler.cn/a/530184.html

相关文章:

  • SpringMVC全局异常处理+拦截器使用+参数校验
  • FBX SDK的使用:基础知识
  • 图像噪声处理技术:让图像更清晰的艺术
  • 【ArcGIS遇上Python】批量提取多波段影像至单个波段
  • 20【变量的深度理解】
  • 增删改查(CRUD)操作
  • it基础使用--5---git远程仓库
  • 如果通过认证方式调用Sf的api
  • 动态函数调用和模拟
  • CNN的各种知识点(一):卷积神经网络CNN通道数的理解!
  • BitLocker技巧与经验
  • 基于 YOLOv8+PyQt5 界面自适应的无人机红外目标检测系统项目介绍框架
  • 在C语言多线程环境中使用互斥量
  • Ollama 介绍,搭建本地 AI 大模型 deepseek,并使用 Web 界面调用
  • 让banner.txt可以自动读取项目版本
  • Rust 中的注释使用指南
  • 【hot100】刷题记录(11)-搜索二维矩阵 II
  • AI源码加训练
  • 如何配置Java JDK
  • 8.原型模式(Prototype)
  • 代码随想录算法训练营第十六天| 二叉树4
  • 【论文复现】基于Otsu方法的多阈值图像分割改进鲸鱼优化算法
  • LLMs之OpenAI o系列:OpenAI o3-mini的简介、安装和使用方法、案例应用之详细攻略
  • 【每天学习一点点】通过使用@property装饰器来创建一个属性的getter和setter方法
  • 【周易哲学】生辰八字入门讲解(八)
  • STM32 DMA数据转运