1. 程式人生 > 實用技巧 >Django基礎-001

Django基礎-001

題目

參考連結:

https://www.2cto.com/kf/201610/559087.html
https://blog.csdn.net/u012429555/article/details/90476001

注意

  • 傳入的是一個一維陣列,但是給出了 二維陣列的 行 和列,所以要考慮二維轉一維的位置問題 int index = i * cols + j;進行二維轉一維

程式碼實現

public class Solution {
    public boolean hasPath(char[] matrix, int rows, int cols, char[] str) {
        int flag[] = new int[matrix.length];
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                if (helper(matrix, rows, cols, i, j, str, 0, flag))
                    return true;
            }
        }
        return false;
    }
 
    private boolean helper(char[] matrix, int rows, int cols, int i, int j, char[] str, int k, int[] flag) {
        int index = i * cols + j;//進行二維轉一維
/*
i < 0 || i >= rows || j < 0 || j >= cols  
      保證陣列不越界
matrix[index] != str[k] 
      進行對比,也就是比較矩陣中的當前位置上與str在k位置上的字母是否相同;
      例如 index =0;k=0,就是比較矩陣的第一個與目標中的第一個是否相同,也就是找到開始位置;
      如果遍歷矩陣完了還沒找到開始位置與目標開始位置一樣的字母就可以說這個矩陣中沒有這個字串
flag[index] == 1
      當前位置訪問了就是1,沒訪問就是0
      如果當前位置訪問過了,就意味著不可以返回走過的路徑
無論哪一項為true
就代表矩陣當前位置與目標字串當前位置 上的字元 不匹配
*/
        if (i < 0 || i >= rows || j < 0 || j >= cols || matrix[index] != str[k] || flag[index] == 1)
            return false;
        if(k == str.length - 1) return true; //如果上面的條件都不成立,就代表能夠找到這樣的路徑,所有要給出遞迴的出口,出口就是,目標字串已經比較到了末尾位置,也就是最後一個位置;
        flag[index] = 1;//如果還沒又比較到目標字串的最末尾位置,就把矩陣的當前位置 置為 1,表明已經訪問了 這裡只是 **假設當前位置可以走到**
        if (helper(matrix, rows, cols, i + 1, j, str, k + 1, flag)//矩陣往下走一步,同時目標字串也往後走一個
                || helper(matrix, rows, cols, i - 1, j, str, k + 1, flag)//往上
                || helper(matrix, rows, cols, i, j + 1, str, k + 1, flag)//往右
                || helper(matrix, rows, cols, i, j - 1, str, k + 1, flag)) //往左
            return true;//都比較完了並且能找到這個路徑,就返回true
        
        flag[index] = 0;//如果當前位置走著走著走不通了,就把當前位置 假設的1 換為 0; 畢竟1 本來就是假設的,這裡就是說重置一下
        return false;//都走不通了,就返回false
    }
}

總結:

跟走迷宮問題差不多 開始位置為任意,比較的地方不一樣