巨无霸成就感+1
(中途真的被java的二维数组填充搞崩溃,可不可以来一个memset呀呜呜呜: (
leetcode题目比算法竞赛题目好的地方在,没有那么多的数据格式限制和容量限制
damn it算法竞赛真是给我搞崩溃
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例 1:
输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"
输出:true
示例 2:
输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "SEE"
输出:true
示例 3:
输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCB"
输出:false
class Solution {
static int flag[][];
public boolean exist(char[][] board, String word) {
int n=board.length;
int m=board[0].length;
flag=new int[n][];
for(int i=0;i<n;i++)
flag[i]=new int[m];
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
int low[]=new int[m];
Arrays.fill(low,0);
for(int q=0;q<n;q++)
flag[q]=low.clone();
boolean b=backtrack(i,j,0,board,word);
if(b==true) return true;
}
}
return false;
}
public static boolean backtrack(int x,int y,int pos,char [][]board,String word)
{
if(x<0||x>=board.length) return false;
if(y<0||y>=board[0].length) return false;
if(flag[x][y]==1) return false;
if(pos==word.length()-1&& board[x][y]==word.charAt(pos))
{
return true;
}
if(board[x][y]==word.charAt(pos))//如何在向下遍历,通过当前节点继续走
{
flag[x][y]=1;//此处点可走,标记为1
boolean bo;
bo=backtrack(x+1,y,pos+1,board,word) ||backtrack(x,y+1,pos+1,board,word) ||backtrack(x-1,y,pos+1,board,word) ||backtrack(x,y-1,pos+1,board,word) ;
if(bo==true) return true;
else {flag[x][y]=0;return false;}
}
return false;
}
}