华为OD机试真题 Java 实现【组合出合法最小数】【2023Q1 200分】,附详细解题思路

在这里插入图片描述

一、题目描述

给一个数组,数组里面都是代表非负整数的字符串,将数组里所有的数值排列组合拼接起来组成一个数字,输出拼接成的最小的数字。

二、输入描述

一个数组,数组不为空,数组里面都是代表非负整数的字符串,可以是0开头。

例如:[“13”, “045”, “09”, “56”]。

数组的大小范围:[1, 50]
数组中每个元素的长度范围:[1, 30]

三、输出描述

以字符串的格式输出一个数字,如果最终结果是多位数字,要优先选择输出不是“0”开头的最小数字;如果拼接出的数字都是“0”开头,则选取值最小的,并且把开头部分的“0”都去掉再输出;如果是单位数“0”,可以直接输出“0”。

四、解题思路

  1. 使用深度优先搜索DFS对数组进行全排列,得到所有可能的排列组合;
  2. 对结果数组进行排序,按照字符串的字典序排序;
  3. 遍历排列组合数组,找到第一个不是以’0’开头的最小数字,并保存为目标数字;
  4. 定义一个辅助函数,如果最终结果是多位数字,要优先选择输出不是“0”开头的最小数字,删掉以0开头的数字;
  5. 输出目标数字;

五、Java算法源码

你可能感兴趣的:(java,华为,开发语言,面试,算法)