云南建设厅网站工程师,电子商务网站建设与管理课程设计,电商小程序开发需要多少钱,律师网站建设案例文章目录电话号码的字母组合(17)代码解答单词搜索(79)代码解答电话号码的字母组合(17) 思路: 根据题意我们必须根据数字获取对应的字符数组#xff0c;因此我们先定义1个字符数组表示这个电话表
private String[] letters {,,abc,因此我们先定义1个字符数组表示这个电话表
private String[] letters {,,abc,def,ghi,jkl,mno,pqrs,tuv,wxyz};接着我们定义结果集,同时我们对特殊case进行判断
ListString res new ArrayList();if(digits null || digits.length() 0){return res;}回溯部分的思路(helper): 我们需要传入一个可变的字符串StringBuilder,因为StringBuilder的性能比较高,还要我们输入的数字digits。 我们可以看到 当我们输入2位数显示出来的字符串长度也就是2因此将这这个条件作为退出递归的条件当满足这个条件时就将可变字符串加入结果集也就是我们要的答案。 public void helper(StringBuilder curr,String digits){if(curr.length() digits.length()){res.add(curr.toString());return;}我们要获取我们输入的每一个数字从而获取对应的字符数组 int num digits.charAt(curr.length())-0;String s1 letters[num];遍历我们获取的整个字符数组将它们依次加入可变字符串curr中重复以上操作。 for(char c : s1.toCharArray()){curr.append(c);helper(curr,digits);curr.deleteCharAt(curr.length()-1);}代码解答
class Solution {private String[] letters {,,abc,def,ghi,jkl,mno,pqrs,tuv,wxyz};ListString res new ArrayList();public ListString letterCombinations(String digits) {if(digits null || digits.length() 0){return res;}helper(new StringBuilder(),digits);return res;}public void helper(StringBuilder curr,String digits){if(curr.length() digits.length()){res.add(curr.toString());return;}int num digits.charAt(curr.length())-0;String s1 letters[num];for(char c : s1.toCharArray()){curr.append(c);helper(curr,digits);curr.deleteCharAt(curr.length()-1);}}
}单词搜索(79) 这道题就是它给了我们一个二维数组我们需要去根据我们输入的字符串去找在这个表格中接连出现的。如果有就返回true。 思路: 我需要先获取这个二位数组的长宽我们输入字符串的长度并且我们将这个二维数组变成布尔类型的字符数组,当检查到一个就将此位置置为true。我们定义方法search去搜索传入的参数分别是ij(start)0为我们输入的字符串的字符数组的起始索引。
class Solution {//先定义长和宽int m;int n;int w;char[] letters;char[][] board;boolean[][] visted;public boolean exist(char[][] board, String word) {this.m board.length;this.n board[0].length;this.w word.length();this.letters word.toCharArray();this.board board;this.visted new boolean[m][n];for(int i 0;im;i){for(int j 0;jn;j){//0是字符串数组的起始索引boolean res search(i,j,0);if(res){return true;}}}return false;}当我们的start到达了数组的最大长度就表示我们整个字符串都已经遍历完成这时就返回true。 当我们的ij不在二维数组里面也就是说出边界了或者某个字符不等于二维数组里面的字符。这时通通返回false。 if(i0 || j0 || im || jn || letters[start] ! board[i][j]){return false;}接着我们去遍历二维数组每四个方向
boolean res search(i1,j,start1) || search(i,j1,start1) || search(i-1,j,start1) ||search(i,j-1,start1);代码解答
class Solution {//先定义长和宽int m;int n;int w;char[] letters;char[][] board;boolean[][] visted;public boolean exist(char[][] board, String word) {this.m board.length;this.n board[0].length;this.w word.length();this.letters word.toCharArray();this.board board;this.visted new boolean[m][n];for(int i 0;im;i){for(int j 0;jn;j){//0是字符串数组的起始索引boolean res search(i,j,0);if(res){return true;}}}return false;}public boolean search(int i,int j,int start){if(start w){return true;}if(i0 || j0 || im || jn || letters[start] ! board[i][j]){return false;}board[i][j] 52;boolean res search(i1,j,start1) || search(i,j1,start1) || search(i-1,j,start1) ||search(i,j-1,start1);board[i][j] - 52;return res;}
}