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

如何用Java递归统计嵌套列表中奇偶长度列表的数量

递归统计嵌套列表中奇偶长度列表的数量

看起来你已经有了一个不错的开头,接下来咱们把这个递归方法补全,实现统计嵌套列表中所有列表(包括外层和所有内层子列表)的奇偶长度数量。

核心思路

  1. 先统计当前列表本身:不管是不是嵌套结构,传入的当前列表本身就是需要统计的对象之一,先判断它的长度奇偶性,更新计数。
  2. 递归处理子列表:遍历列表中的每个元素,如果元素是List类型,就递归调用统计方法,把返回的子列表奇偶计数累加到当前结果中。
  3. 忽略非列表元素:只有List类型的元素需要处理,其他类型(比如整数、字符串)直接跳过即可。

完整实现代码

import java.util.List;

public class MyRekursion {
    // 返回格式:[奇数长度列表的数量, 偶数长度列表的数量]
    public static int[] countOddEven(List<Object> nestedList) {
        int odd = 0;
        int even = 0;

        // 第一步:统计当前列表的长度奇偶性
        if (nestedList.size() % 2 == 1) {
            odd++;
        } else {
            even++;
        }

        // 第二步:遍历元素,递归处理嵌套子列表
        for (Object obj : nestedList) {
            if (obj instanceof List) {
                // 强制转换为List<Object>,添加注解抑制泛型擦除带来的unchecked警告
                @SuppressWarnings("unchecked")
                List<Object> subList = (List<Object>) obj;
                // 递归调用获取子列表的统计结果
                int[] subResult = countOddEven(subList);
                // 累加子结果到当前计数
                odd += subResult[0];
                even += subResult[1];
            }
            // 非List类型元素直接忽略,不参与统计
        }

        return new int[] { odd, even };
    }

    // 测试用例,验证逻辑正确性
    public static void main(String[] args) {
        // 构造嵌套列表:[[1,2], [3], [[4,5,6]]]
        List<Object> testList = List.of(
                List.of(1, 2),
                List.of(3),
                List.of(List.of(4,5,6))
        );
        int[] result = countOddEven(testList);
        System.out.println("奇数长度列表数量:" + result[0]); // 输出4
        System.out.println("偶数长度列表数量:" + result[1]); // 输出1
    }
}

测试用例说明

我们来拆解测试用例的统计过程,确保你理解每一步:

  • 最外层列表长度3 → 奇数,odd=1
  • 子列表[1,2]长度2 → 偶数,even=1
  • 子列表[3]长度1 → 奇数,odd=2
  • 子列表[[4,5,6]]长度1 → 奇数,odd=3
    • 它的子列表[4,5,6]长度3 → 奇数,odd=4

最终得到的结果是[4,1],和代码输出一致。

注意事项

  • 空列表处理:空列表长度为0,会被统计为偶数长度列表。
  • 泛型警告:由于Java泛型的类型擦除,强制转换时会出现unchecked警告,添加@SuppressWarnings("unchecked")是安全的,因为我们已经通过instanceof List确认了元素类型。
  • 非列表元素:嵌套列表中的非List类型元素不会影响统计结果,只会被跳过。

内容的提问来源于stack exchange,提问作者Huy Tran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:47:13