// 杀手数独计算器 // // 规则 // 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