Algorithm
题目描述
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。
输入
[[a,b,c,e],[s,f,c,s],[a,d,e,e]],"abcced"
返回值
true
代码(dfs深度遍历)
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param matrix char字符型二维数组
* @param word string字符串
* @return bool布尔型
*/
public boolean hasPath (char[][] matrix, String word) {
// write code here
if(null == matrix || matrix.length == 0 || matrix[0].length == 0 || word == null || word.length() == 0){
return false;
}
for(int i = 0;i < matrix.length; i++){
for(int j = 0; j < matrix[0].length; j++){
if(matrix[i][j] == word.charAt(0)){
boolean[][] vis = new boolean[matrix.length][matrix[0].length];
if(dfs(i,j,vis,matrix,0,word)){
return true;
}
}
}
}
return false;
}
public boolean dfs(int m, int n, boolean[][] vis, char[][] matrix, int k, String word){
if(m < 0 || n < 0 || m >= matrix.length || n >= matrix[0].length || vis[m][n] == true){
return false;
}
if(matrix[m][n] == word.charAt(word.length()-1) && (k == word.length()-1)){
return true;
}
if(word.charAt(k)==matrix[m][n]){
vis[m][n] = true;
if(dfs(m+1,n,vis,matrix,k+1,word)||dfs(m,n+1,vis,matrix,k+1,word)||dfs(m-1,n,vis,matrix,k+1,word)||dfs(m,n-1,vis,matrix,k+1,word)){
return true;
}else{
vis[m][n] = false;
return false;
}
}else{
vis[m][n] = false;
return false;
}
}
}
Review
https://medium.com/mobile-app-development-publication/7-ways-to-null-crash-android-kotlin-without-using-a759751860c6
文章介绍了7点kotlin中可能会出现的闪退问题以及解决方案,这里只总结了一下其中的前两点。
1、
val value: String = intent.getStringExtra("MY_KEY")
API 29及之前,若获取不到Key指为MY_KEY
的内容,则会出现闪退,因此需要进行空检查
val value: String = intent.getStringExtra("MY_KEY") ?: ""
API 30这里增加了编译时检查,若没有进行空检查则会报错
2、当项目存在Java和Kotlin代码,使用kotlin调用Java代码如下
// Java
public class MyClass {
String accessNullString() {
return null;
}
}
我们知道它是空的,但是kotlin层是无法得知的,因此kotlin编译时不会检查出来
// Kotlin
val my = MyClass()
val notNull: String = my.accessNullString()
这样运行时是必然会出现空指针异常的,因此解决方案为:在java层可能为空的方法前加上@Nullable注解
Tips
1、使用GridLayout时用了GridLayout.spec(int start, float weight)方法,该方法为API21后才引入,因此在Android 4.4及以下设备会出现闪退问题。可用support包中的Gridlayout替代,后续需注意类似问题
2、排查获取不到点击事件的问题时,可以给界面中的每个控件设一个背景色,这样可以直观的看出自己想点击的按钮是否被其他控件遮挡,导致获取不到点击事件。若确认不会被遮挡,再考虑其他方面原因。
Share
http://itpcb.com/a/218764