1 Star 0 Fork 0

luobg01/PFJ_coding

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
code046_wordSearch.h 2.27 KB
一键复制 编辑 原始数据 按行查看 历史
luobg01 提交于 2024-01-13 15:48 . leetcode 79 单词搜索
//
// Created by 罗炳国 on 2024/1/8.
//
#ifndef PFJ_CODE046_WORDSEARCH_H
#define PFJ_CODE046_WORDSEARCH_H
#include "commonHeader.h"
/**
* 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。
* 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
* 79: https://leetcode.cn/problems/word-search/description/
**/
class code046_wordSearch {
public:
bool exist(vector<vector<char>>& board, string word) {
int n = board.size();
int m = board[0].size();
bool ans = false;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
ans = p(board, i, j, word, 0);
if (ans)
return ans;
}
}
return ans;
}
bool p(vector<vector<char>>& board, int i, int j, string& s, int pos) {
int n = board.size();
int m = board[0].size();
if (pos == s.size())
return true;
if (i < 0 || j < 0 || i >= n || j >= m)
return false;
if (board[i][j] != s[pos])
return false;
char stash = board[i][j];
board[i][j] = 0;
// 上
bool p1 = p(board, i - 1, j, s, pos + 1);
if (p1) {
board[i][j] = stash;
return p1;
}
// 下
bool p2 = p(board, i + 1, j, s, pos + 1);
if (p2) {
board[i][j] = stash;
return p2;
}
// 左
bool p3 = p(board, i, j - 1, s, pos + 1);
if (p3) {
board[i][j] = stash;
return p3;
}
// 右
bool p4 = p(board, i, j + 1, s, pos + 1);
if (p4) {
board[i][j] = stash;
return p4;
}
board[i][j] = stash;
return false;
}
void test() {
vector<vector<char>> board {{'A','B','C','E'},{'S','F','C','S'},{'A','D','E','E'}};
string word("ABCCED");
bool ans = exist(board, word);
std::cout << "ans:" << ans << std::endl;
}
};
#endif//PFJ_CODE046_WORDSEARCH_H
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/luobg01/pfj_coding.git
git@gitee.com:luobg01/pfj_coding.git
luobg01
pfj_coding
PFJ_coding
master

搜索帮助

23e8dbc6 1850385 7e0993f3 1850385