美文网首页
计算一个数有多少种相加的结果集

计算一个数有多少种相加的结果集

作者: liust15 | 来源:发表于2019-04-11 16:59 被阅读0次

    回溯算法

    输入 一个数n
    数组结果集

    例如:
    输入一个值为

    6

    结果为

    6
    5 1
    4 2
    4 1 1
    3 3
    3 2 1
    3 1 1 1
    2 2 2
    2 2 1 1
    2 1 1 1 1
    1 1 1 1 1 1

    本题使用全排列的方式计算结果

        @Test
        public void teset() {
            List<String> strings = generateTogether(6);
            strings.forEach(System.out::println);
        }
    
        public List<String> generateTogether(int n) {
            List<String> res = new ArrayList<>();
            generate(res, "", n, n);
            return res;
        }
    
        //max 表示后面的i的最大值,i对应的后面为相加的值
        private void generate(List<String> res, String ans, int max, int i) {
            if (i == 0){
                res.add(ans);
                return;
            }
            for (int j = i; j > 0; j--) {
                if (max >= j) {
                    generate(res, ans +" "+ j,j,i-j);
                }
            }
        }
    

    本题扩展
    计算有多少种结果

    例如 上题中 6 的结果又11

    1 结果为1
    2的结果为2
    3的结果为3

    本题采用动态规划的方法
    思路

    0 1 2 …… n
    1 1 1 1 …… 1
    2 1 1 2 …… dp[n]+=dp[n-2]
    …… …… …… …… …… ……
    n dp[0] dp[1] dp[2] …… dp[n]+dp[0]
       private long printResult(int n) {
            int dp[] = new int[n + 1];
            Arrays.fill(dp, 1);
            for (int i = 2; i <= n; i++) {
                for (int j = i; j <= n; j++) {
                    dp[j] += dp[j - i];
                }
            }
           return dp[n];
        }
    

    相关文章

      网友评论

          本文标题:计算一个数有多少种相加的结果集

          本文链接:https://www.haomeiwen.com/subject/teitwqtx.html