**进制转换后自定义排序**

2026 华为OD机试真题 6月14日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

给定一个非负整数数组 nums 和一个目标进制 base(2<=base<=16),请完成以下操作并返回最终结果:

  1. 进制转换:将数组中每个整数转换为 base 进制的字符串(小写字母表示 10-15 如 10→"a",15→"f");
  2. 自定义排序:对转换后的字符串数组按字符串对应的十进制数值降序排列;
  3. 注意: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"]。

解题思路

本题是一个 进制转换与排序 问题,核心在于理解排序规则。

关键洞察:

  • 转换后的字符串需要按其对应的十进制数值降序排列
  • 由于原整数数组已知,我们直接按原整数降序排列即可
  • 这与按进制转换字符串的十进制值降序排列是等价的

算法步骤:

  1. 定义进制转换函数:将整数转换为指定进制的字符串
    • 0 转换为 "0"
    • 其他数字通过除基取余得到各位
    • 使用字符 '0'-'9' 和 'a'-'f' 表示各位
  2. 创建整数与进制字符串的配对
  3. 按整数降序排序
  4. 提取排序后的进制字符串

字符映射:

  • 0-9 使用字符 '0'-'9'
  • 10-15 使用字符 'a'-'f'

复杂度分析

  • 时间复杂度:O(N log N),排序需要 O(N log N),进制转换 O(N)
  • 空间复杂度:O(N),存储转换
THE END