LeetCode-79. Word Search
2017-07-01 09:57
357 查看
题目描述
给定一个二维字符矩阵和一个单词,判定该矩阵中地临近地字符能否组成这个单词。要求:临近地意思是指两字符只能水平临近或者竖直临近;每个位置地字符只能使用一次。解题思路
使用回溯算法,采用递归实现,需要判定边界条件,需要一个数组记录走过地位置。代码
public class Solution { private boolean[][] flags; public boolean exist(char[][] board, String word) { if(board==null || board.length==0 || word==null) return false; if(board[0].length==0 || word.length()==0) return true; flags=new boolean[board.length][board[0].length]; for(int i=0;i<board.length;i++){ for(int j=0;j<board[0].length;j++){ flags[i][j]=true; if(existCore(board, word, 0, i, j)) return true; flags[i][j]=false; } } return false; } private boolean existCore(char[][] board,String word,int point,int i,int j){ if(board[i][j]==word.charAt(point)){ if(point==word.length()-1) return true; if(i-1>=0 && !flags[i-1][j]){ flags[i-1][j]=true; if(existCore(board,word,point+1,i-1,j)) return true; flags[i-1][j]=false; } if(i+1<board.length && !flags[i+1][j]){ flags[i+1][j]=true; if(existCore(board,word,point+1,i+1,j)) return true; flags[i+1][j]=false; } if(j-1>=0 && !flags[i][j-1]){ flags[i][j-1]=true; if(existCore(board,word,point+1,i,j-1)) return true; flags[i][j-1]=false; } if(j+1<board[0].length && !flags[i][j+1]){ flags[i][j+1]=true; if(existCore(board,word,point+1,i,j+1)) return true; flags[i][j+1]=false; } return false; } return false; } }
相关文章推荐
- 回溯之Leetcode79——Word Search
- LeetCode-79. Word Search
- leetCode 79.Word Search (词搜索) 解题思路和方法
- LeetCode79 Word Search
- Leetcode 79. Word Search
- LeetCode 79. Word Search
- 【LeetCode】C# 79、Word Search
- 【一天一道LeetCode】#79. Word Search
- LeetCode 79. Word Search
- Leetcode 79. Word Search (Medium) (cpp)
- leetcode.array--79. Word Search
- LeetCode(79) Word Search
- leetcode-79 Word Search
- [Leetcode 79] Word Search
- LeetCode 79 Word Search (DFS)
- 【一天一道LeetCode】#79. Word Search
- LeetCode(79) Word Search
- LeetCode(79) Word Search
- 个人记录-LeetCode 79. Word Search
- [Leetcode] #79 Word Search