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

给定总车轮数计算2轮、4轮车辆不同组合数的算法求解

问题核心分析

题目要求统计两类车轮数不同的组合数,和车辆排列顺序无关,本质是求满足 2*a +4*b = n(a、b均为非负整数,分别代表2轮车、4轮车数量)的整数解个数。

原代码错误点
  1. 计数逻辑错误:原代码采用类似爬楼梯的递归思路,将「选2轮车再选4轮车」和「选4轮车再选2轮车」判定为不同方案,统计的是排列数而非组合数,和题目要求不符。
  2. 存在拼写错误:递归调用时写的函数名是uniqueCounts(多了末尾的s),和定义的uniqueCount不匹配,运行会直接报错。
正确解法

思路推导

  • 2和4都是偶数,若总车轮数n为奇数,必然没有合法方案,直接返回0;若n<2,也不存在合法车辆,返回0。
  • 固定4轮车的数量b即可唯一确定组合:b的取值范围是从0到n//4(4轮车最多可装的数量),每个合法b对应的2轮车数量a=(n-4*b)//2必然是非负整数(偶数减偶数仍为偶数,可被2整除)。
  • 总方案数就是b的可选值总数,即(n//4) +1,可以直接通过数学公式O(1)计算,不需要递归或动态规划。

代码实现

def uniqueCount(wheels):
    # 奇数车轮、车轮数小于2都没有合法方案
    if wheels % 2 != 0 or wheels < 2:
        return 0
    max_4wheel = wheels // 4
    return max_4wheel + 1

结果验证

  • 输入4:4//4 +1 =2,对应2种方案,符合示例
  • 输入6:6//4 +1=2,对应2种方案,符合示例
  • 输入10:10//4 +1=3,对应3种方案,符合示例

如果需要用动态规划思路实现(适配更多车辆类型的扩展场景),可以用完全背包求组合数的写法,固定遍历物品的顺序避免统计排列:

def uniqueCount(wheels):
    if wheels % 2 != 0 or wheels < 2:
        return 0
    # dp[i] 表示i个车轮对应的合法组合数
    dp = [0] * (wheels + 1)
    dp[0] = 1  # 0个车轮的空组合作为初始值
    # 先遍历2轮车,统计仅用2轮车的组合数
    for i in range(2, wheels + 1):
        dp[i] += dp[i - 2]
    # 再遍历4轮车,累加加入4轮车后的组合数,固定顺序不会重复统计排列
    for i in range(4, wheels + 1):
        dp[i] += dp[i - 4]
    return dp[wheels]

内容的提问来源于stack exchange,提问作者Moustafa Makhlouf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:45:34