「根據b站up主土妹的方法,像以前高中初中複習一樣來鍛鍊自己做演算法題的能力!!!把劍指offer的題目作為例題,系統學習乙個知識點之後,再去做leetcode的題目。」
「加油!」
@[toc](目錄)
地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。 例如,當k為18時,機械人能夠進入方格(35,37),因為3+5+3+7 = 18。但是,它不能進入方格(35,38),因為3+5+3+8 = 19。請問該機械人能夠達到多少個格仔?
關公面前耍大刀
感覺真的不是很難的題目。可是一開始找不到一種很好的方法來寫,後來經過幾次除錯,下面這段**case通過率還是12.5%…自我感覺良好,不知道問題出在**。!
public class solution
while(i<=rows )
i++;
}while(j<=cols)
j++;
}for(i=0;i<=row1;i++)
}return totalsum;
}public int calnumbsum(int i)
return sum;
}}
反思: 你的想法從根本性上有錯誤。例如,當k=10的時候,i(或j)=19,就中斷了,那28,37呢?也就是可行區間不一定是連續的!
檢視了一下講解之後,發現別人是用dfs,bfs來解決的!呃,我想的太簡單了?可是仔細畫圖之後,發現我的解法應該也是可以的!!!不過後來除錯之後發現自己的**有乙個大bug!!!
while(i<=rows )
i++;
}while(j<=cols)
j++;
}for(i=0;i<=row1;i++)
這段**中的
if (sum>threshold)
完全有可能不執行的!!!此時row1的值並沒有被改變,還是原來的0!!!
關公耍大刀
class solution
public int dfs(int i,int j)
visited[i][j] = true;
return 1 + dfs(i+1,j) + dfs(i,j+1);
}public int count(int i,int j)
while(j != 0)
return sum;
}//bfs
public int movingcount(int m, int n, int k) );//存放陣列,第一位是i,第兩位是j
int ans = 0;
while(queue.size() >0));
queue.offer(new int);
}return ans;
}public int count(int i,int j)
while(j != 0)
return sum;
}}
注意邊界點有3種情況:
1.越界了(i>m || j>n)
2.sumi+sumj > k
3.已經訪問過了
總結:1.看到這種什麼向上,向下的題目要應該要想到遍歷解法。
2.總結一下dfs和bfs的解法模板。
3.完成閱讀後刪)
劍指offer之陣列查詢
題目 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。完成 coding utf 8 class solution array 二維列表 deffind self,target,ar...
劍指offer 陣列
資料是最簡單的資料結構,它佔據一塊連續的記憶體並按照順序儲存資料。建立陣列時,首先指點陣列的容量大小,然後根據大小分配記憶體。缺點 空間效率不高。經常有空閒的區域滅有得到充分利用。優點 時間效率很高。可以根據時間效率高的特點,來實現簡單的雜湊表 把陣列的下標設為雜湊表的鍵值,陣列中的每乙個數字設為雜...
劍指offer 陣列
public class 03 陣列中的重複數字 swap number,number i i return 1 交換 public void swap int number,int i,int j public class 03 陣列中的重複數字 return 1 public intfindre...