https://leetcode.com/problems/word-search/description/
m x n grid의 문자열이 주어진다.
이 안에서 특정 word가 존재하는지 여부를 확인하라.
맞는 단어를 하나 하나 확인해 가며 진행한다.
다만 시작 지점이 모든 영역이다.
로직 자체는 간단하다.
코드
더보기
bool existBT(int idx, vector<bool>& vVisit, vector<vector<char>>& board, string word, int idxW)
{
int H = board.size();
int W = board[0].size();
char target = word[idxW];
int iy = idx / W;
int ix = idx % W;
char cur = board[iy][ix];
if(vVisit[idx] || target!= cur)
return false;
vVisit[idx] = true;
if(idxW+1 == word.size())
return true;
// left
if(ix > 0)
{
if(existBT(idx-1, vVisit, board, word, idxW+1))
return true;
}
// right
if(ix < W-1)
{
if(existBT(idx+1, vVisit, board, word, idxW+1))
return true;
}
// up
if(iy > 0)
{
if(existBT(idx-W, vVisit, board, word, idxW+1))
return true;
}
// down
if(iy < H-1)
{
if(existBT(idx+W, vVisit, board, word, idxW+1))
return true;
}
vVisit[idx] = false;
return false;
}
bool exist(vector<vector<char>>& board, string word)
{
vector<bool> vVisit;
vVisit.resize(board.size()*board[0].size(), false);
for(int q = 0; q < vVisit.size(); ++q)
{
if(existBT(q, vVisit, board, word, 0))
return true;
}
return false;
}
결과
'Leetcode > NeetCode' 카테고리의 다른 글
[BackTrack][Medium] 17. Letter Combinations of a Phone Number (0) | 2024.07.30 |
---|---|
[BackTrack][Medium] 131. Palindrome Partitioning (0) | 2024.07.29 |
[BackTrack][Medium] 40. Combination Sum II (0) | 2024.07.26 |
[👍][BackTrack][Medium] 90. Subsets II (0) | 2024.07.23 |
[👍][BackTrack][Medium] 46. Permutations (1) | 2024.07.23 |