You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归实现判断两个整数数组是否为排列的问题求助

递归判断两个整数数组是否互为排列的问题修复

你的代码核心问题在于逻辑顺序错误,且未处理「匹配当前元素后需验证剩余元素」的递归逻辑:

  • 原代码只要发现a[indexA] == b[indexB]就直接返回true,完全忽略剩余元素的匹配检查;
  • 前两个if分支覆盖了所有可能性,递归调用的代码根本不会执行;
  • 边界条件判断错误,当indexA等于数组长度时,说明所有元素已匹配完成,应返回true而非false。

正确递归思路

要实现递归判断排列,核心是为每个a中的元素找到b中未被使用过的相等元素,再递归验证剩余元素,需引入标记数组记录b中元素的使用状态,避免重复匹配。

修正后的代码

public class PermutationChecker {
    // 对外暴露的入口方法
    public static boolean isPermutation(int[] a, int[] b) {
        // 长度不等直接返回false,这是排列的必要条件
        if (a.length != b.length) {
            return false;
        }
        // 标记b中元素是否已被匹配使用
        boolean[] used = new boolean[b.length];
        return isPermutationHelper(a, b, 0, used);
    }

    // 递归辅助方法
    private static boolean isPermutationHelper(int[] a, int[] b, int indexA, boolean[] used) {
        // 递归终止:a的所有元素都匹配完成
        if (indexA == a.length) {
            return true;
        }

        // 遍历b的所有元素,寻找匹配项
        for (int indexB = 0; indexB < b.length; indexB++) {
            if (!used[indexB] && a[indexA] == b[indexB]) {
                // 标记当前b元素已使用
                used[indexB] = true;
                // 递归检查a的下一个元素,后续匹配成功则直接返回true
                if (isPermutationHelper(a, b, indexA + 1, used)) {
                    return true;
                }
                // 回溯:当前匹配导致后续失败,取消标记尝试其他元素
                used[indexB] = false;
            }
        }

        // 遍历完b都找不到匹配元素,返回false
        return false;
    }

    // 测试示例
    public static void main(String[] args) {
        int[] a = {1,2,3,4};
        int[] b = {4,3,2,1};
        System.out.println(isPermutation(a, b)); // 输出true
    }
}

代码逻辑说明

  1. 入口校验:先判断数组长度是否相等,不等直接返回false,同时初始化标记数组;
  2. 终止条件:当indexA等于a.length时,说明a的所有元素都在b中找到对应未使用元素,返回true;
  3. 遍历匹配:对a的当前元素,遍历b的每个元素,找到未使用且相等的元素后标记状态,递归验证下一个元素;
  4. 回溯操作:若递归返回false,说明当前匹配导致后续无法完成,取消标记继续尝试其他元素。

内容的提问来源于stack exchange,提问作者bar toplian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 03:35:16