• 算法练习之整数分割问题


    整数分割问题是这样的:

    将一个正整数分割成一系列整数的和。

    如:

    5 = 4 + 1

    5 = 3 + 2

    5 = 3 + 1 + 1

    5 = 2 + 2 + 1

    5 = 2 + 1 + 1 + 1

    5 = 1 + 1 + 1 + 1 + 1

    数字顺序不重要,但不能出现重复,比如

    5 = 2 + 2 + 1和5 = 2 + 1 + 2就是不能重复出现的。

    之前想了很多方法,总是存在重复的项。有一个比较“笨”的方法就是用一个HashSet来保存,但总感觉不是很满意。

    今天上课时,突然想到一个比较满意的方法,用Java实现如下:

     1 public class SplitNum {
     2     public static void main(String[] args) {
     3         split(6);
     4     }
     5 
     6     public static void split(int n) {
     7         split(n + " = ", n, n - 1);
     8     }
     9 
    10     /**
    11      * 分割数字num
    12      * @param pre 前缀字符
    13      * @param num 要分割的数字
    14      * @param max 最大的分割数
    15      */
    16     public static void split(String pre, int num, int max) {
    17         if (num <= max) {
    18             System.out.println(pre + num);
    19             for (int i = num - 1; i > 0; i--) {
    20                 split(pre + i + " + ", num - i, i);
    21             }
    22         } else {
    23             for (int i = max; i > 0; i--) {
    24                 split(pre + i + " + ", num - i, i);
    25             }
    26         }
    27     }
    28 }

    yjiyjige 2013.4.18

  • 相关阅读:
    【bzoj2669】[cqoi2012]局部极小值 容斥原理+状压dp
    默默的等式
    P3403 跳楼机
    作物
    【bzoj3174】[Tjoi2013]拯救小矮人
    【bzoj4976】宝石镶嵌
    BZOJ2121-字符串游戏
    mzf的考验
    牛客网round1
    jloi2015
  • 原文地址:https://www.cnblogs.com/yjiyjige/p/3029583.html
Copyright © 2020-2023  润新知