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


    整数分割问题是这样的:

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

    如:

    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

  • 相关阅读:
    Vim step by step
    Ubuntu解压命令全览
    这样才能使本地Mysql服务允许被外部主机连接(两步)
    [Python] logging.logger
    Python Selenium
    MySQL中char、varchar和text的区别
    Way to MongoDB
    Python误区之strip,lstrip,rstrip
    Android Studio Tips
    Way to tmux
  • 原文地址:https://www.cnblogs.com/yjiyjige/p/3029583.html
Copyright © 2020-2023  润新知