- 单词搜索
ts
function exist(board: string[][], word: string): boolean {
const m = board.length
const n = board[0].length
// 获取首字符出现位置
const getA = (): number[][] => {
let arr: number[][] = new Array()
for (let i1 = 0; i1 < m; i1++) {
for (let i2 = 0; i2 < n; i2++) {
if (board[i1][i2] === word[0]) {
arr.push([i1, i2])
}
}
}
return arr
}
const arr: number[][] = getA()
// 不能重复
const nofind = (histiry: number[][], me: number[]): boolean => {
for (let i1 = 0; i1 < histiry.length; i1++) {
if (histiry[i1][0] === me[0] && histiry[i1][1] === me[1]) {
return false
}
}
return true
}
let boo = false
const getB = (histiry: number[][], step: number) => {
if (!boo) {
if (step === word.length - 1) {
boo = true
}
let _arr: number[][] = new Array()
const last: number[] = histiry.at(-1) || []
// 向左
if (last[1] > 0) {
if (nofind(histiry, [last[0], last[1] - 1])) {
if (board[last[0]][last[1] - 1] === word[step + 1]) {
_arr.push([last[0], last[1] - 1])
}
}
}
// 向右
if (last[1] < n - 1) {
if (nofind(histiry, [last[0], last[1] + 1])) {
if (board[last[0]][last[1] + 1] === word[step + 1]) {
_arr.push([last[0], last[1] + 1])
}
}
}
// 向下
if (last[0] > 0) {
if (nofind(histiry, [last[0] - 1, last[1]])) {
if (board[last[0] - 1][last[1]] === word[step + 1]) {
_arr.push([last[0] - 1, last[1]])
}
}
}
// 向上
if (last[0] < m - 1) {
if (nofind(histiry, [last[0] + 1, last[1]])) {
if (board[last[0] + 1][last[1]] === word[step + 1]) {
_arr.push([last[0] + 1, last[1]])
}
}
}
for (let i = 0; i < _arr.length; i++) {
getB([...histiry, _arr[i]], step + 1)
}
}
}
for (let i1 = 0; i1 < arr.length; i1++) {
getB([arr[i1]], 0)
}
return boo
}