射靶得分
敢算法第四天
题目#
刷脉脉看到的一题(据说是字节面试题)
运动员射靶 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;}