题解 | #疯牛病I#
疯牛病I
https://www.nowcoder.com/practice/2066902a557647ce8e85c9d2d5874086
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pasture int整型二维数组 * @param k int整型 * @return int整型 */ public int healthyCows(int[][] pasture, int k) { // write code here int[][] flag = new int[pasture.length][pasture[0].length]; for (int i = 0; i < pasture.length; i++) { System.arraycopy(pasture[i], 0, flag[i], 0, pasture[i].length); } search(pasture, flag, 0, k); int count = 0; for (int i = 0; i < pasture.length; i++) { for (int j = 0; j < pasture[0].length; j++) { if (flag[i][j] == 1) { count++; } } } return count; } public void search(int[][] pasture, int[][] flag,int count, int k) { if (count >= k) { return; } for (int i = 0; i < pasture.length; i++) { System.arraycopy(flag[i], 0, pasture[i], 0, pasture[i].length); } for (int i = 0; i < pasture.length; i++) { for (int j = 0; j < pasture[i].length; j++) { if (pasture[i][j] == 2) { if (i >= 1) { flag[i - 1][j] = flag[i-1][j]==0 ?0:2; } if (i < pasture.length - 1) { flag[i + 1][j] = flag[i+1][j]==0 ?0:2;; } if (j >= 1) { flag[i][j-1] = flag[i][j-1]==0 ?0:2;; } if (j < pasture[0].length - 1) { flag[i][j+1]= flag[i][j+1]==0 ?0:2; } } } } search(pasture,flag,count+1,k); } }
本题考察的知识点是递归,所用的编程语言是java。
我相信大家对于此题使用递归方法来求解是一点问题都没有,我着重讲一下我为什么使用两个数组。
第一个数组是原数组,第二个数组是为了辅助因为每次都有健康的牛被感染,需要更新数组数据。
每次遍历数组时,需要一个辅助数组来更新数据,而不能在原数组中进行数据更新,因为在原数组中更新数据时已经是疯牛病的牛不知道是从健康的牛感染而来本来就是已经感染疯牛病的牛