Open Rain120 opened 2 years ago
对数组重新排序,使得数组每一项可以满足这样一个规则:arr[i] = arr[i + 1] * 3 或者 arr[i] = arr[i + 1] / 2
function changeArr(arr) {
const map = new Map();
let res;
arr.forEach(n => {
map.set(n, (map.get(n) || 0) + 1);
});
const dfs = (prev, index, cur) => {
if (index === arr.length + 1) {
res = cur;
return;
}
if (map.get(prev * 2) > 0) {
const value = prev * 2;
map.set(value, map.get(value) - 1);
dfs(value, index + 1, [...cur, value]);
map.set(value, map.get(value) + 1);
}
if (!(prev % 3) && map.get(prev / 3) > 0) {
const value = prev / 3
map.set(value, map.get(value) - 1);
dfs(value, index + 1, [...cur, value]);
map.set(value, map.get(value) + 1);
}
}
arr.forEach(n => {
dfs(n, 2, [n]);
});
return res;
}
题目
假设我们取一个数字 x 并执行以下任一操作:
a: 将 x 除以 3 (如果可以被 3 除) b: 将 x 乘以 2 每次操作后,记下结果。如果从 9 开始,可以得到一个序列
有一个混杂的整数序列,现在任务是对它们重新排序,以使其符合上述序列并输出结果