从Leetcode 每日一题练习继续讨论:
2191. 将杂乱无章的数字排序
2191. Sort the Jumbled Numbers
题解
本题要解决两个问题, 一是将原始数字映射为其对应的映射数字, 二是将映射数字排序并按序排列对应的原始数字并返回. 将原始数字映射为对应数字只需每次除以10, 按位处理即可, 注意单独处理0的情况. 对映射后数字排序并反映到原来的数组上需要注意体重明确说明了对于映射数字相同的数字需保持原始数组的顺序, 因此需要稳定排序, 在go中使用sort.SliceStable即可进行稳定排序.
代码
func sortJumbled(mapping []int, nums []int) []int {
type mapNum struct{
raw int
mapped int
}
mapNums := []mapNum{}
for _,value := range nums{
mapNums = append(mapNums, mapNum{value, toMap(value, mapping)})
}
sort.SliceStable(mapNums, func(i,j int)bool{
return mapNums[i].mapped < mapNums[j].mapped
})
result := []int{}
for _,num := range mapNums{
result = append(result, num.raw)
}
return result
}
func toMap(raw int, mapping []int)int{
if raw == 0{
return mapping[0]
}else{
result := 0
i := 1
remain := 0
quote := 0
for raw != 0{
remain = raw % 10
quote = raw / 10
raw = quote
result += mapping[remain] * i
i *= 10
}
return result
}
}