C# 如何解决无法转换类型';int';至';int[]和#x27;错误
我开始我自己的问题,因为我找不到任何与c#直接相关的东西,我使用的解决方案是不同的方法。 问题描述如下 在给定网格中,每个单元格可以有三个值之一:C# 如何解决无法转换类型';int';至';int[]和#x27;错误,c#,C#,我开始我自己的问题,因为我找不到任何与c#直接相关的东西,我使用的解决方案是不同的方法。 问题描述如下 在给定网格中,每个单元格可以有三个值之一: the value 0 representing an empty cell; the value 1 representing a fresh orange; the value 2 representing a rotten orange. 每分钟,任何与腐烂的橙子相邻的新鲜橙子(4个方向)都会腐烂 返回单元格没有新鲜橙色之前必须经过的最小分钟
the value 0 representing an empty cell;
the value 1 representing a fresh orange;
the value 2 representing a rotten orange.
每分钟,任何与腐烂的橙子相邻的新鲜橙子(4个方向)都会腐烂
返回单元格没有新鲜橙色之前必须经过的最小分钟数。如果这是不可能的,则返回-1 例1: 输入:[[2,1,1],[1,1,0],[0,1,1]] 产出:4 例2: 输入:[[2,1,1],[0,1,1],[1,0,1]] 输出:-1 说明:左下角(第2行,第0列)的橙色永远不会腐烂,因为腐烂只发生在4个方向上 例3: 输入:[[0,2]] 输出:0 说明:因为在0分钟时已经没有新鲜的橙子了,所以答案是0 注:
1数组声明int[,]directions
定义了一个多维数组,奇怪的是,它不是C#中的IEnumerable
。这意味着“普通”阵列支持的许多项不可用;其中一个是通过顶级数组的foreach
迭代,这对编写具有直观意义。相反,您迭代的是多维数组的一维表示,而不是您想要的
您可以执行以下两种操作之一:或者使用锯齿状数组-int[][]方向
-或者切换到嵌套的for
循环,访问内部循环中数组的每个元素。哪一行是第29行?使用锯齿状数组而不是多维数组。将int[,]方向
更改为int[][]方向
。C#中的多维数组不是数组数组,因此您的foreach
实际上是获取int
s,而不是int[]
sy您的问题对于一个简单的编译错误来说过于冗长。我们不需要知道您的系统需求或代码中不相关的部分。你甚至没有指出第29行是最重要的@MickyD抱怨一个问题过于冗长(顺便说一句,这是一件罕见的事情),同时又抱怨缺乏具体的信息,这可能会让相对缺乏经验的用户感到困惑。在试图帮助别人时,请记住他们的观点。@Yunnosch。多维数组支持foreach。只是foreach枚举了所有的元素,不可能单独枚举op使用的行。@jasmete-Yep,这正是我所说的。:)
1 <= grid.length <= 10
1 <= grid[0].length <= 10
grid[i][j] is only 0, 1, or 2.
public class Solution {
public int OrangesRotting(int[][] grid) {
var rows = grid.Length;
var cols = grid[0].Length;
HashSet<string> fresh = new HashSet<string>();
HashSet<string> rotten = new HashSet<string>();
for(var i = 0; i < rows; i++){
for(var j = 0; j < cols; j++){
var current = grid[i][j];
if(current == 1){
fresh.Add(""+i+j);
} else if (current == 2){
rotten.Add(""+i+j);
}
}
}
int minutes = 0;
int[,] directions = {{0,1},{1,0},{-1,0},{0,-1}};
while(fresh.Count > 0){
HashSet<string> infected = new HashSet<string>();
foreach(string s in rotten){
int i = s[0] - '0';
int j = s[1] - '0';
foreach(int[] direction in directions){
int nextI = i + direction[0];
int nextJ = j + direction[1];
if(fresh.Contains(""+nextI+nextJ)){
fresh.Remove(""+nextI+nextJ);
infected.Add(""+nextI+nextJ);
}
}
}
if(infected.Count == 0) return -1;
minutes++;
}
return minutes;
}
}