敢算法第四天
题目
刷脉脉看到的一题(据说是字节面试题)
运动员射靶 10 次,每次得分区间 0 - 10 之间,问总分 90 分的情况有多少种
思考
设计函数
// 传入目标得分 输出情况
type ShootScore = (target: number, times?: number) => number
猛地一看,这不就排列组合嘛这不就,排列…是排列还是组合来的?
组合,对是组合(排列有序,组合无序。太丢人 学的都还回去了)
先暴力写一下,看看思路
function shootScore (target, times = 10) {
let sum = 0
for(let i = 0; i = 10; i++) {
for(let j = 0; j = 10; j++) {
...n
{
if (i + j + ... + n === target) {
sum++
}
}
}
}
return sum
}
重复循环递归下
function shootScore (target, times = 10) {
let sum = 0
const recursive = (idx = 1, pre = 0) => {
for (let i = 0; i = 10; i++) {
if (idx < times) {
idx++
recursive(idx, pre + 1)
} else {
if (pre === target) {
sum++
}
}
}
}
return sum
}