计算从位置X到Y的最少步数 | 豆包MarsCode AI刷题

98 阅读3分钟

public class Main { public static int solution(int x_position, int y_position) { // Please write your code here int temp = (y_position - x_position > 0) ? (y_position - x_position) : -1*(y_position - x_position); //System.out.println(temp); //int temp1 = temp / 2; int sum = 0; int step = 0; int num = 1; while(sum < temp) { sum += num; step++; if(step % 2 == 0) { num++; } } return step; }

public static void main(String[] args) {
    // You can add more test cases here
    System.out.println(solution(12, 6));
    System.out.println(solution(34, 45));
    System.out.println(solution(50, 30));
}

}

int temp = (y_position - x_position > 0) ? (y_position - x_position) : -1*(y_position - x_position); 这行代码使用了 Java 中的三元运算符(也称为条件运算符),其格式为 condition ? value_if_true : value_if_false。这行代码的作用是计算并赋值给 temp,根据 y_positionx_position 的相对大小来确定结果。

代码解析

int temp = (y_position - x_position > 0) ? (y_position - x_position) : -1 * (y_position - x_position);

详细步骤

  1. 条件判断:

    • (y_position - x_position > 0): 这是条件部分。如果 y_position 大于 x_position,这个条件为真。
  2. 返回值:

    • 如果条件为真(即 y_position 大于 x_position),则计算并返回 y_position - x_position,即返回正值。
    • 如果条件为假(即 y_position 小于或等于 x_position),则计算并返回 -1 * (y_position - x_position),这实际上是返回 x_position - y_position 的相反数,即负值。

功能总结

  • 结果:
    • temp 将被赋值为 |y_position - x_position|,即 y_positionx_position 之间的绝对差值。
    • 不论 y_position 是大于还是小于 x_position,最终 temp 的值都是两者之差的绝对值。

使用场景

这种写法常用在需要计算两个数之间差距而不关心其符号的地方。它确保 temp 无论何时都能得到一个非负值。如果你想要更简洁的代码,可以直接使用 Math.abs 方法来计算绝对值:

int temp = Math.abs(y_position - x_position);

这种写法更加可读且易于理解。

这段 Java 代码定义了一个名为 solution 的方法,其功能是根据给定的 x_positiony_position 计算达到某个位置所需的步数,步数由一个特定规律(递增的整数)控制。下面我们逐步分析代码的原理和逻辑。

代码解析

public static int solution(int x_position, int y_position) {
    // 计算 y_position 和 x_position 之间的绝对差值
    int temp = (y_position - x_position > 0) ? (y_position - x_position) : -1 * (y_position - x_position);
    // 另一种更简单的写法是:int temp = Math.abs(y_position - x_position);
    
    int sum = 0; // 记录已走的总步数
    int step = 0; // 实际步数
    int num = 1; // 当前步数

    // 当 sum 小于 temp 时,继续执行循环
    while (sum < temp) {
        sum += num; // 累加当前步数
        step++; // 增加步数计数
        if (step % 2 == 0) {
            num++; // 每两步增加一步
        }
    }

    return step; // 返回走的总步数
}

代码逻辑

  1. 计算绝对差值:

    • 首先,计算 y_positionx_position 的绝对差值并将其赋值给 temp
    • 这可以看作是需要到达的“距离”。使用三元运算符的方式有些冗长,可以用 Math.abs(y_position - x_position) 来代替。
  2. 初始化变量:

    • sum: 用于累计每一步所走的总的步子。
    • step: 用于记录实际走的步数。
    • num: 每一步的步长,开始时为1。
  3. while 循环:

    • 循环条件是 sum < temp,也就是说,直到走的总步数小于需要的距离 temp
    • 在循环中,sum 会累加当前的步长 num,并增加步数计数 step
    • 每隔两步,num 会增加 1,这意味着走的步长会逐渐增大。例如,步长依次为 1, 1, 2, 2, 3, 3, 等等。
  4. 计算结果:

    • 循环结束后,step 将包含达到或超过 temp 所需的步数,这就是返回的结果。

可视化示例

假设 x_position = 0y_position = 5,则 temp = 5

  • 步数分析:
    • 第1步:走 1,总和 = 1
    • 第2步:走 1,总和 = 2
    • 第3步:走 2,总和 = 4
    • 第4步:走 2,总和 = 6 (此时总和已经 >= 5)

总步数在这个例子中是4,因此返回值是4。

总结

这段代码的主要功能是计算达到目标位置所需的步数,其步长是递增的。你可以通过调整 x_positiony_position 的值来测试不同场景的步数计算。