刷题系列 - 构造特定数组的逆序拼接

42 阅读1分钟

1.问题描述

小U得到了一个数字n,他的任务是构造一个特定数组。这个数组的构造规则是:对于每个i从1到n,将数字n到i逆序拼接,直到i等于n为止。最终,输出这个拼接后的数组。

例如,当n等于3时,拼接后的数组是 [3, 2, 1, 3, 2, 3]


2.测试样例

样例1:

输入:n = 3
输出:[3, 2, 1, 3, 2, 3]

样例2:

输入:n = 4
输出:[4, 3, 2, 1, 4, 3, 2, 4, 3, 4]

样例3:

输入:n = 5
输出:[5, 4, 3, 2, 1, 5, 4, 3, 2, 5, 4, 3, 5, 4, 5]


3.代码实现

展示规律是从n倒数,拼接规律是依次倒数至1、2、3...n

// 递归
const dealSubOpt = (curNum, limitNum, callback) => {
    callback(curNum)
    if (curNum > limitNum) {
        curNum--
        dealSubOpt(curNum, limitNum, callback)
    }
}

function solution(n) {
    const arr = []
    new Array(n).fill(1).map((item, i) => {
        dealSubOpt(n, i + 1, (num) => {
            arr.push(num)
        })
    })
    return arr;
}

function main() {
    console.log(JSON.stringify(solution(3)) === JSON.stringify([3, 2, 1, 3, 2, 3]));
    console.log(JSON.stringify(solution(4)) === JSON.stringify([4, 3, 2, 1, 4, 3, 2, 4, 3, 4]));
    console.log(JSON.stringify(solution(5)) === JSON.stringify([5, 4, 3, 2, 1, 5, 4, 3, 2, 5, 4, 3, 5, 4, 5]));
}

main();