数独计算器.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // 杀手数独计算器
  2. //
  3. // 规则
  4. // 1. 杀手框内的数字不能重复
  5. // 2. 杀手框内的数字之和等于杀手框的和
  6. /**
  7. * 计算杀手框 中可能的组合
  8. * @param sum 总和
  9. * @param itemNum 元素数量
  10. */
  11. function cal(sum, itemNum){
  12. let result = [];
  13. let arr = [];
  14. let temp = [];
  15. for(let i = 1; i <= 9; i++){
  16. arr.push(i);
  17. }
  18. // console.log(arr);
  19. function dfs(arr, temp, sum, itemNum){
  20. if(temp.length === itemNum){
  21. if(temp.reduce((a, b) => a + b, 0) === sum){
  22. result.push(temp.slice());
  23. }
  24. return;
  25. }
  26. for(let i = 0; i < arr.length; i++){
  27. temp.push(arr[i]);
  28. dfs(arr.slice(i + 1), temp, sum, itemNum);
  29. temp.pop();
  30. }
  31. }
  32. dfs(arr, temp, sum, itemNum);
  33. return result;
  34. }
  35. console.log(cal(6, 3));// 1, 2, 3
  36. console.log(cal(7, 2));//1,6 | 2,5 | 3,4
  37. console.log(cal(8, 2));// 1,7 | 2,6 | 3,5
  38. console.log(cal(12, 2));// 3, 9 | 4, 8 | 5, 7
  39. console.log(cal(13, 2));//4,9 | 5,8 | 6,7
  40. console.log(cal(16, 4));
  41. console.log(cal(24, 3));// 7,8,9
  42. console.log(cal(24, 4))//1689,25892679