- 输出C(n, k)组合
var combine = function(n, k) {
let arr = [], ans = [], tmp = [];
for (let i = 0; i < n; i++) {
arr.push(i+1);
}
function subCNK(startIndex, num) {
if (num == 0) {
ans.push([...tmp]);
return;
} else {
if (arr.length - startIndex > num) {
subCNK(startIndex + 1, num);
}
tmp.push(arr[startIndex]);
subCNK(startIndex + 1, num-1);
tmp.pop();
}
}
subCNK(0, k);
return ans;
}
- 数独
var solveSudoku = function(board) {
function ifInRow(num, i) {
for (var r = 0; r < 9; r++) {
if (board[i][r] == num) return true;
}
return false;
}
function ifInColumn(num, j) {
for (var c = 0; c < 9; c++) {
if (board[c][j] == num) return true;
}
return false;
}
function ifInBox(num, currentX, currentY) {
var startX = Math.floor(currentX / 3) * 3,
startY = Math.floor(currentY / 3) * 3;
for (var x = startX; x < startX + 3; x++) {
for (var y = startY; y < startY + 3; y++) {
if (board[x][y] == num) return true;
}
}
return false;
}
function solve(index) {
if (index >= 81) {
return true;
}
var x = Math.floor(index / 9),
y = Math.floor(index % 9);
if (board[x][y] != '.') {
return solve(index+1);
} else {
for (var k = 1; k < 10; k++) {
if (!ifInRow(k, x) && !ifInColumn(k, y) && !ifInBox(k, x, y)) {
board[x][y] = k + '';
var result = solve(index + 1);
if (result) return true;
board[x][y] = '.';
}
}
return false;
}
}
solve(0);
};