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();