gpt4 book ai didi

c# - 力扣 : Prison Cells After N Days

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:49:58 26 4
gpt4 key购买 nike

Stack,我无法完全理解这个怪事。我每次都在评估数组中的位置。每次我收到不同的结果时如何初始化数组...如果有人能解释一下,我将不胜感激。

在 While 循环中:正确


0,1,0,1,1,0,0,1
0,1,1,0,0,0,0,0
0,0,0,0,1,1,1,0
0,1,1,0,0,1,0,0
0,0,0,0,0,1,0,0
0,1,1,1,0,1,0,0
0,0,1,0,1,1,0,0
0,0,1,1,0,0,0,0

外部 While 循环(初始化一次):不正确


0,1,0,1,1,0,0,1
0,1,1,0,0,0,0,0
0,0,1,0,1,0,1,0
0,0,1,1,0,0,1,0
0,0,0,1,0,0,1,0
0,1,1,0,1,1,0,0
0,0,1,1,1,0,1,0
0,0,0,0,1,1,0,0

问题详情

一排8个牢房,每个牢房不是有人住就是空着。

每天,单元格是被占用还是空闲都按照以下规则变化:

如果一个单元格有两个相邻的邻居都被占用或都空着,那么这个单元格就会被占用。否则,它将变为空置。(请注意,因为 jail 是一排,所以该排的第一个和最后一个牢房不能有两个相邻的邻居。)

我们用以下方式描述 jail 的当前状态:如果第 i 个牢房被占用,则 cells[i] == 1,否则 cells[i] == 0。

给定 jail 的初始状态,返回N天后 jail 的状态(以及上述N种变化。)

示例 1:预期输出

输入:细胞 = [0,1,0,1,1,0,0,1], N = 7
输出:[0,0,1,1,0,0,0,0]
说明:
下表总结了 jail 每天的状态:
第 0 天:[0, 1, 0, 1, 1, 0, 0, 1]
第一天:[0, 1, 1, 0, 0, 0, 0, 0]
第 2 天:[0, 0, 0, 0, 1, 1, 1, 0]
第三天:[0, 1, 1, 0, 0, 1, 0, 0]
第 4 天:[0, 0, 0, 0, 0, 1, 0, 0]
第 5 天:[0, 1, 1, 1, 0, 1, 0, 0]
第六天:[0, 0, 1, 0, 1, 1, 0, 0]
第七天:[0, 0, 1, 1, 0, 0, 0, 0]

方法

    static public int[] PrisonAfterNDays(int[] cells, int N) 
{
int counter = 0;
//Doesn't work if it's here
//int[] temp = new int[8];
while(counter < N)
{
Console.WriteLine(String.Join(",",cells));

//Works if it's here ?!?!?!
int[] temp = new int[8];
for(int j = 1; j < 8-1; j++)
{
if(cells[j-1] == cells[j+1])
{
temp[j] = 1;
}
else
{
temp[j] = 0;
}

}

cells = temp;
counter++;
}

return cells;
}

最佳答案

请记住,尽管 int 是值类型,但数组是引用类型,因此 int[] 是引用类型。 (参见 What is the difference between a reference type and value type in c#?)

当您执行 cells = temp; 时,您将 cellstemp 指向完全相同的数组!您可以使用以下代码对此进行测试:

int[] a = new int[2];
int[] b = a;

b[0] = 85;
b[1] = 3;

Console.WriteLine(a[0]); // prints 85
Console.WriteLine(a[1]); // prints 3

所以这意味着在外循环的第二次迭代中,以下代码同时更改了 cells[j]temp[j]:

temp[j] = 1;

这显然意味着您会得到奇怪的结果。

出于这个原因,我认为您应该在循环中定义temp

关于c# - 力扣 : Prison Cells After N Days,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55565034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com