给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例:
board =
[
['A','B','C','E'],
['S','F','C','S'],
['A','D','E','E']
]
给定 word = "ABCCED", 返回 true.
给定 word = "SEE", 返回 true.
给定 word = "ABCB", 返回 false.
具体代码实现
其中有很多东西可以当做模板记住!!!
class Solution {
private:
vector>visited;
int m,n;
int d[4][2]={{-1,0},{0,-1},{1,0},{0,1}};
bool Area(int x,int y)
{
return x>=0&&x=0&&y>& board, string word,int index,int x,int y)
{
if(index==word.size()-1)
return board[x][y]==word[index];
if(board[x][y]==word[index])
{
visited[x][y]=true;
for(int i=0;i<4;i++)
{
int newx=x+d[i][0];
int newy=y+d[i][1];
if(Area(newx,newy)&& !visited[newx][newy]&&help(board,word,index+1,newx,newy))
return true;
}
visited[x][y]=false;
}
return false;
}
public:
bool exist(vector>& board, string word) {
m=board.size();
if(m<=0)
return false;
n=board[0].size();
visited=vector>(m,vector(n,false));
for(int i=0;i
给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
示例 1:
输入:
11110
11010
11000
00000
输出: 1
示例 2:
输入:
11000
11000
00100
00011
输出: 3
具体代码实现
其中有很多东西可以当做模板记住!!!和上面的一个题有一点点不同,基本上思想一致,都是回溯遍历的思想。
class Solution {
private:
int m,n;
vector>visited;
int d[4][2]={{-1,0},{0,-1},{1,0},{0,1}};
bool Area(int x,int y)
{
return x>=0&&x=0&&y>&grid, int x,int y)
{
visited[x][y]=true;
for(int i=0;i<4;i++)
{
int newx=x+d[i][0];
int newy=y+d[i][1];
if(Area(newx,newy)&&!visited[newx][newy]&&grid[newx][newy]=='1')
help(grid,newx,newy);
}
return ;
}
public:
int numIslands(vector>& grid) {
m=grid.size();
if(m==0)
return 0;
n=grid[0].size();
visited=vector>(m,vector(n,false));
int res=0;
for(int i=0;i