Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解决无法转换类型';int';至';int[]和#x27;错误_C# - Fatal编程技术网

C# 如何解决无法转换类型';int';至';int[]和#x27;错误

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个方向)都会腐烂 返回单元格没有新鲜橙色之前必须经过的最小分钟

我开始我自己的问题,因为我找不到任何与c#直接相关的东西,我使用的解决方案是不同的方法。 问题描述如下

在给定网格中,每个单元格可以有三个值之一:

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;
    }
}