给你一个下标从 0 开始的整数数组 mapping ,它表示一个十进制数的映射规则,mapping[i] = j 表示这个规则下将数位 i 映射为数位 j 。
一个整数 映射后的值 为将原数字每一个数位 i (0 <= i <= 9)映射为 mapping[i] 。
另外给你一个整数数组 nums ,请你将数组 nums 中每个数按照它们映射后对应数字非递减顺序排序后返回。
注意:
如果两个数字映射后对应的数字大小相同,则将它们按照输入中的 相对顺序 排序。
nums 中的元素只有在排序的时候需要按照映射后的值进行比较,返回的值应该是输入的元素本身。
示例 1:
输入:mapping = [8,9,4,0,2,1,3,5,7,6], nums = [991,338,38]
输出:[338,38,991]
解释:
将数字 991 按照如下规则映射:
输入:mapping = [0,1,2,3,4,5,6,7,8,9], nums = [789,456,123]
输出:[123,456,789]
解释:789 映射为 789 ,456 映射为 456 ,123 映射为 123 。所以排序后数组为 [123,456,789] 。
提示:
mapping.length == 10
0 <= mapping[i] <= 9
mapping[i] 的值 互不相同 。
1 <= nums.length <= 3 * 10^4
0 <= nums[i] < 10^9
class Solution {public int[] sortJumbled(int[] mapping, int[] nums) {//二维数组,copy[i][0]:保存数据的映射,copy[i][1]:保存数据的映射nums[i]int[][] copy=new int[nums.length][2];for (int i = 0; i < copy.length; i++) {copy[i][0]=nums[i];copy[i][1]=nums[i];}//对数据进行映射for (int i = 0; i < copy.length; i++) {Stack stack=new Stack<>();if(copy[i][0]==0) stack.push(0);int tmp=0;while (copy[i][0]>0) {tmp=copy[i][0]%10;stack.push(tmp);copy[i][0]/=10;}tmp=0;while (!stack.isEmpty()) {tmp*=10;tmp+=mapping[stack.pop()];}copy[i][0]=tmp;}//排序Arrays.sort(copy,new Comparator() {@Overridepublic int compare(int[] o1, int[] o2) {return o1[0]-o2[0];}});for (int i = 0; i < copy.length; i++) {nums[i]=copy[i][1];}return nums;}
}
上一篇:STM32的中断
下一篇:线性回归-线性神经网络