• m个苹果放在n个盘子中有多少种结果


    题目

    m个苹果放在n个盘子中有多少种结果,前置条件:

    • 允许存在空盘
    • 重复的摆放结果忽略不计

    根据题意,也就是有3种情况,的确完全重复的摆放方式是没多大意义的

    思路

    这题可以用枚举的描述方式进行尾递归求解:

    • 情况一:

      • 存在一个空盘,甚至没有苹果或一个苹果,直接返回 1
    • 情况二:

      • 连盘子或苹果都没有,直接返 0
    • 情况三:

      • 可能有n个盘子只摆放了一个苹果,m-n的摆放占位,剩下的苹果任意摆放
    • 情况四:

      • 可能n个盘子为空,n-1,减去这空盘,剩下的m个苹果随意放置
    • btw,存在一个以上的空盘摆放方式与图上的重复摆放方式是等价的,尾递归甚至效率并不比循环低,说了这么多,研究此类问的方法还是DP(动态规划)

    将上述情况三、四二者相加就是总的所有方法(结果)

    实现

    package com.test.dp;
    
    import org.junit.Test;
    
    public class AppleOnDiskTest {
        @Test
        public void main(){
            System.out.println(dp(5,0));
        }
    
        /**
         *
         * @param m apple
         * @param n disk
         * @return
         */
        private int dp(int m,int n){
            if (m <= 0 || n <= 0)
                return 0;
            if (m == 0 || n == 1)
                return  1;
            else
            return dp(m-n,n) + dp(m,n-1);
        }
    }
    
    

    模拟递归的方式求解方式

    - The End -

    知识共享许可协议 本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

  • 相关阅读:
    前端chrome浏览器调试总结
    this指南——绑定了谁?
    轮播图终极版
    一个后台项目的总结
    h5 websocket 断开重新连接
    ios手机键盘拉起之后页面不会回退的问题
    promise 的串行执行
    js中对小数的计算
    对问卷项目的优化
    禁止eslint对指定代码检测
  • 原文地址:https://www.cnblogs.com/hoochanlon/p/9683062.html
Copyright © 2020-2023  润新知