SOURCE

const arr1 = [4,8,6,3,12,9];

// 生成的数组满足a[i+1] = a[i] / 3 或者a[i+1] = a[i] * 2

function changeArr(arr) {
    const map = new Map()
    let find = false
    let ret
    arr.forEach((n) => {
        map.set(n, (map.get(n) || 0) + 1)
    })
    arr.forEach((n) => {
        if (find) return
        dfs(n, 2, [n])
    })
    function dfs(prev, index, res) {
        if (find) return
        if (index === arr.length + 1) {
            find = true
            ret = res
        }
        if (map.has(prev * 2) && map.get(prev * 2) > 0) {
            map.set(prev * 2, map.get(prev * 2) - 1)
            dfs(prev * 2, index + 1, [...res, prev * 2])
            map.set(prev * 2, map.get(prev * 2) + 1)
        }
        if (!(prev % 3) && map.get(prev / 3) > 0) {
            map.set(prev / 3, map.get(prev / 3) - 1)
            dfs(prev / 3, index + 1, [...res, prev / 3])
            map.set(prev / 3, map.get(prev / 3) + 1)
        }
    }
    return ret
}

console.log(changeArr(arr1));
console 命令行工具 X clear

                    
>
console