1. 程式人生 > 其它 >Linux系統之Ubuntu的安裝教程

Linux系統之Ubuntu的安裝教程

這道題和之前的dfs+剪枝很像,但是有一個問題,就是如何去重

按道理前後左右都可以走,如果能走回去那不就走個不停了

但其實可以這樣去重,第一次走到某個格子繼續走,其他情況如果發現這個格子被走過直接結束

如何記錄這個座標呢,一開始傻了,想搞個hashset用來存放,但是問題是不太好放,於是發現可以再搞個大小一致的網格嘛,true和false用來記錄是否訪問過

於是程式碼如下:

class Solution {
    
    int res=0;
    public int movingCount(int m, int n, int k) {
        if (k==0 || m==1 && n==1) return
1; boolean[][] map=new boolean[m][n]; dfs(0,0,m,n,k,map); return res; } public void dfs(int i,int j,int m,int n,int k,boolean[][] map) { int sum=0; int i1=i; int j1=j; while(i1!=0) { sum+=i1%10; i1/=10; }
while(j1!=0) { sum+=j1%10; j1/=10; } if(i<0||j<0||i>m-1||j>n-1||sum>k) { return; }//超出邊界 if(map[i][j]==true) { return; } else { res+=1; map[i][j]
=true; dfs(i+1,j,m,n,k,map); dfs(i,j+1,m,n,k,map); dfs(i-1,j,m,n,k,map); dfs(i,j-1,m,n,k,map); } } }

另外注意一下這個各個位數相加的方法,可能其他會用到

但是這裡有個牛x的結論

結合什麼可連通性,

易推出機器人可僅通過向右和向下移動,訪問所有可達解。

於是可以去掉向左走和向上走的部分