Aja*_*jay 0 algorithm pseudocode matrix
我最近接受了一次采访,面试官给了我一些假代码并询问了与之相关的问题.不幸的是,由于缺乏准备,我无法回答他的问题.由于时间限制,我不能问他解决这个问题的方法.如果有人能指导我并帮助我理解这个问题,我会非常感激,所以我可以为将来做些改进.下面是伪代码:
A sample state of ‘a’:
[[ 2, NULL, 2, NULL],
[ 2, NULL, 2, NULL],
[NULL, NULL, NULL, NULL],
[NULL, NULL, NULL, NULL]]
FUNCTION foo()
FOR y = 0 to 3
FOR x = 0 to 3
IF a[x+1][y] != NULL
IF a[x+1][y] = a[x][y]:
a[x][y] := a[x][y]*2
a[x+1][y] := NULL
END IF
IF a[x][y] = NULL
a[x][y] := a[x+1][y]
a[x+1][y] := NULL
END IF
END IF
END FOR
END FOR
END FUNCTION
Run Code Online (Sandbox Code Playgroud)
面试官问我:
上面的代码有什么问题,我该如何解决?
一旦纠正,函数foo做什么?请关注功能的结果,而不是实现的细节.
你怎么能让foo变得更通用?解释最多三个可能的泛化方向,并为每个方向描述一个策略,无需编写代码!
我向他提到过:
0
,false
为布尔值和null
引用类型分配它们.IF a[x+1][y] != NULL
,当x
equals 时,条件将产生数组索引越界错误3
.但是我觉得面试官在我的回答中寻找其他的东西并且对解释不满意.
pkp*_*pnd 10
你玩过游戏"2048"(游戏链接)吗?如果没有,这个问题可能对你没那么直观,因此,我认为这是一个糟糕的面试问题.
这个尝试做的是模拟2048游戏的一步,数字上升.数字将向上移动一个单元格,除非它们碰到另一个数字或矩阵边界(想象重力将所有数字向上拉).如果两个数字相等,它们组合并产生一个新数字(它们的总和).
注意:这不是2048游戏的一个步骤,因为数字只向上移动一个单元格,而在游戏中它们"一直"移动直到它们击中其他东西.要获得2048游戏的一个步骤,您将重复给定的功能,直到不再发生更改.
正如您所提到的,代码中的问题是数组索引越界.它应该通过迭代来修复x = 0 to 2
.
为了使这更加通用,你必须具有创造性:
NULL
但应该检查一些其他的标记值(这是另一个输入).至于你的这部分答案:
整数矩阵不能有空值,默认情况下它们被赋值为0,false表示布尔值,null表示引用类型
这在很大程度上取决于所使用的语言,所以我不会说这是伪代码中的错误(不应该是任何特定语言).例如,在弱类型语言中,您当然可以使用矩阵int
和NULL
值.
你没有提到你对函数行为的看法.如果我是面试官,我会希望看到有人"大声思考"并至少意识到以下情况:
NULL
.NULL
并且上元素变为两倍大.NULL
,那么较低的非NULL
元素"移动"到顶部元素的位置.通过阅读源代码,可以直接获得有关代码的这些观察结果.你是否理解这些"规则"并注意到它(类似于)2048游戏在很大程度上取决于你之前是否玩过游戏.