解题思路
本题是进制转换 + 自定义排序,可按以下步骤处理:
- 进制转换:对每个 nums[i],若其为 0 则直接得到
"0";否则不断对 base 取余得到数位,映射为 0-9a-f 后逆序拼接。
- 排序键:转换后的字符串在 base 进制下的十进制值,等于原整数 nums[i] 本身,因此可直接按 nums[i] 降序排序下标。
- 输出:按排序后的下标,依次输出对应的 base 进制字符串。
常见假解:
P14398.进制转换后自定义排序(100分)
题目内容
给定一个非负整数数组 nums 和一个目标进制 base(2<=base<=16),请完成以下操作并返回最终结果:
- 进制转换:将数组中每个整数转换为 base 进制的字符串(小写字母表示 10-15 如 10→"a",15→"f");
- 自定义排序:对转换后的字符串数组按字符串对应的十进制数值降序排列;
- 注意:0 转换为任意进制的结果均为 "0";输入的整数均为非负整数。
补充说明
- 1<=nums.length<=100
- 0<=nums[i]<=106
- 2<=base<=16
样例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"]。