gpt4 book ai didi

java - 谁能帮我理解这段代码?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:22:39 24 4
gpt4 key购买 nike

谁能帮我理解这段代码?这段代码就是用来解决这个问题的。您正在手机上玩游戏。给定一个长度为 n 的数组,索引从 0 到 n−1。数组的每个元素要么是 0 要么是 1。您只能移动到包含 0 的索引。首先您位于第 0 个位置。在每一步中,您都可以执行以下操作之一:

向前或向后走一步。向前跳跃正好长度 m。这意味着您可以一次从位置 x 移动到 x+1、x−1 或 x+m。新位置必须包含 0。您也可以移动到任何大于 n-1 的位置。

你不能从位置 0 向后移动。如果你移动到任何大于 n−1 的位置,你就赢得了比赛。

给定数组和跳跃的长度,您需要确定是否有可能赢得比赛。

        n = sc.nextInt();
m = sc.nextInt();
field = new int[n];
for (int i = 0; i < n; i++) {
field[i] = sc.nextInt();
}

if (makeMove(0, new LinkedList<Integer>()))
System.out.println("YES");
else
System.out.println("NO");

...

private boolean makeMove(int position, List<Integer> prevPositions) 
{
if (prevPositions.contains(position))
return false;
prevPositions.add(position);

if (position < 0) return false;
else if (position >= n) return true;
else if (field[position] == 1) return false;
else {
return makeMove(position + m, prevPositions) ||
makeMove(position + 1, prevPositions) ||
makeMove(position - 1, prevPositions);
}
}

输入:6 2

   0 0 0 1 0 0

输出:是

输入:6 2

   0 0 1 1 0 0

输出:无

最佳答案

因此,我假设您了解递归的概念,递归是在自身内部调用方法,否则您可能需要查找它。

第一段代码很简单。它初始化移动长度 m和长度数组 n并用随机二进制数字填充它。

makeMove方法通过几个基本案例来查看递归分支是失败还是成功。

1.) if (prevPositions.contains(position))
return false;
prevPositions.add(position);

移动后,此代码会检查您是否已经到达此位置。如果有,它返回 false因为已经知道这种情况是错误的,否则该方法已经返回了 true .

2.) if (position < 0) return false;
else if (position >= n) return true;
else if (field[position] == 1) return false;

-您不能有负头寸,因此返回 false .- 如果你的位置大于n那么你赢了,所以返回true- 你不能移动到包含非零数字的位置,所以返回 false

3.) return makeMove(position + m, prevPositions) ||
makeMove(position + 1, prevPositions) ||
makeMove(position - 1, prevPositions);

此代码从可能的位置递归调用其他移动并返回 true如果这些调用中的任何一个为真。因为你可以跳到position+m , 那么如果 makeMove(position+m, prevPositions) 是有道理的为真,则 makeMove(position, prevPositions)也是如此。同样,您可以转到 position+1position-1所以调用makeMove这些位置的返回值应与 makeMove 相同你原来的位置。希望这是有道理的!

关于java - 谁能帮我理解这段代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33460278/

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