1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- // 杀手数独计算器
- //
- // 规则
- // 1. 杀手框内的数字不能重复
- // 2. 杀手框内的数字之和等于杀手框的和
- /**
- * 计算杀手框 中可能的组合
- * @param sum 总和
- * @param itemNum 元素数量
- */
- function cal(sum, itemNum){
- let result = [];
- let arr = [];
- let temp = [];
- for(let i = 1; i <= 9; i++){
- arr.push(i);
- }
- // console.log(arr);
- function dfs(arr, temp, sum, itemNum){
- if(temp.length === itemNum){
- if(temp.reduce((a, b) => a + b, 0) === sum){
- result.push(temp.slice());
- }
- return;
- }
- for(let i = 0; i < arr.length; i++){
- temp.push(arr[i]);
- dfs(arr.slice(i + 1), temp, sum, itemNum);
- temp.pop();
- }
- }
- dfs(arr, temp, sum, itemNum);
- return result;
- }
- console.log(cal(6, 3));// 1, 2, 3
- console.log(cal(7, 2));//1,6 | 2,5 | 3,4
- console.log(cal(8, 2));// 1,7 | 2,6 | 3,5
- console.log(cal(12, 2));// 3, 9 | 4, 8 | 5, 7
- console.log(cal(13, 2));//4,9 | 5,8 | 6,7
- console.log(cal(16, 4));
- console.log(cal(24, 3));// 7,8,9
- console.log(cal(24, 4))//1689,25892679
|