企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 回溯法 > 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。 > ~~~ function hasPathCore(matrix, rows, cols, row, col, path, pathIndex, visited) { var hasPath = false; if (row < rows && col < cols && row >= 0 && col >= 0 && visited[row][col] === false) { if (matrix[row * cols + col] === path[pathIndex]) { // 是否是路径中的item visited[row][col] = true; // 表示该点已经走过 if (pathIndex === path.length - 1) { hasPath = true; } else { hasPath = hasPathCore(matrix, rows, cols, row - 1, col, path, pathIndex + 1, visited) || hasPathCore(matrix, rows, cols, row + 1, col, path, pathIndex + 1, visited) || hasPathCore(matrix, rows, cols, row, col - 1, path, pathIndex + 1, visited) || hasPathCore(matrix, rows, cols, row, col + 1, path, pathIndex + 1, visited); if (!hasPath) { visited[row][col] = false; } } } } return hasPath; } function hasPath(matrix, rows, cols, path) { // write code here if (path.length <= 0) { return true; } var visited = []; var temp = []; var i, j; for (i = 0; i < rows; i++) { temp = []; for (j = 0; j < cols; j++) { temp.push(false); } visited.push(temp); } for (i = 0; i < rows; i++) { for (j = 0; j < cols; j++) { if (hasPathCore(matrix, rows, cols, i, j, path, 0, visited)) { return true; } } } return false; } ~~~ > 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子? ~~~ function getNumSum(a, b) { var str = [].concat(a, b).join(''); var sum = 0; for (var i = 0; i < str.length; i++) { sum = sum + Number(str[i]) } return sum } function movingCount(threshold, rows, cols) { // write code here if (threshold < 0 || rows < 1 || cols < 1) { return 0 } var count = 0; var visited = []; for (var i = 0; i < rows; i++) { visited[i] = []; for (var j = 0; j < cols; j++) { visited[i][j] = false; } } count = movingCountSum(threshold, 0, 0, rows, cols, visited); return count } function movingCountSum(threshold, row, col, rows, cols, visited) { var count = 0; if (row < rows && col < cols && row >= 0 && col >= 0 && getNumSum(row, col) <= threshold && visited[row][col] === false) { visited[row][col] = true; count = 1 + movingCountSum(threshold, row + 1, col, rows, cols, visited) + movingCountSum(threshold, row - 1, col, rows, cols, visited) + movingCountSum(threshold, row, col + 1, rows, cols, visited) + movingCountSum(threshold, row, col - 1, rows, cols, visited) } return count; } ~~~