**进制转换后自定义排序**
2026 华为OD机试真题 6月14日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
给定一个非负整数数组 nums 和一个目标进制 base(2<=base<=16),请完成以下操作并返回最终结果:
- 进制转换:将数组中每个整数转换为 base 进制的字符串(小写字母表示 10-15 如 10→"a",15→"f");
- 自定义排序:对转换后的字符串数组按字符串对应的十进制数值降序排列;
- 注意:0 转换为任意进制的结果均为 "0";输入的整数均为非负整数。
2026 华为OD机试真题 6月14日华为OD上机新系统考试真题 100 分题型
补充说明
- 1<=nums.length<=100
- 0<=nums[i]<=106
- 2<=base<=16
输入描述
第一行是整数数组,元素之间用逗号分隔;第二行是目标进制 base(整数)
输出描述
按降序排列的进制转换字符串,用逗号分隔
示例1
输入
10,25,3,15,8
16
输出
19,f,a,8,3
说明
- 进制转换结果: 10→"a"、25→"19"、3→"3"、15→"f"、8→"8";
- 转回十进制值: "a"(10)、"19"(25)、"3"(3)、"f"(15)、"8"(8);
- 按数值降序: 25("19") → 15("f") → 10("a") → 8("8") → 3("3");
- 无数值 / 长度相同的情况,最终结果为 ["19","f","a","8","3"]。
示例2
输入
16,256,0,16
2
输出
100000000,10000,10000,0
说明
- 进制转换结果: 16→"10000"、256→"100000000"、0→"0"、16→"10000";
- 转回十进制值: 均为对应原数(256>16=16>0);
- 数值相同的两个 "10000",长度和字典序均相同,顺序不限;
- 最终结果: ["100000000","10000","10000","0"]。
解题思路
本题是一个 进制转换与排序 问题,核心在于理解排序规则。
关键洞察:
- 转换后的字符串需要按其对应的十进制数值降序排列
- 由于原整数数组已知,我们直接按原整数降序排列即可
- 这与按进制转换字符串的十进制值降序排列是等价的
算法步骤:
- 定义进制转换函数:将整数转换为指定进制的字符串
- 0 转换为 "0"
- 其他数字通过除基取余得到各位
- 使用字符 '0'-'9' 和 'a'-'f' 表示各位
- 创建整数与进制字符串的配对
- 按整数降序排序
- 提取排序后的进制字符串
字符映射:
- 0-9 使用字符 '0'-'9'
- 10-15 使用字符 'a'-'f'
复杂度分析
- 时间复杂度:O(N log N),排序需要 O(N log N),进制转换 O(N)
- 空间复杂度:O(N),存储转换
版权声明:
作者:魔改工程师
链接:https://www.sylblog.xin/archives/665
文章版权归作者所有,未经允许请勿转载。
THE END