博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法练习之整数分割问题
阅读量:5880 次
发布时间:2019-06-19

本文共 1076 字,大约阅读时间需要 3 分钟。

整数分割问题是这样的:

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

如:

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      * 分割数字num12      * @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

转载于:https://www.cnblogs.com/yjiyjige/archive/2013/04/18/3029583.html

你可能感兴趣的文章
Android N: jack server failed
查看>>
如何将lotus 通讯簿导入到outlook 2003中
查看>>
WinForm 应用程序中开启新的进程及控制
查看>>
js replace,正则截取字符串内容
查看>>
Thinkphp5笔记三:创建基类
查看>>
查询反模式 - GroupBy、HAVING的理解
查看>>
Android中EditText,Button等控件的设置
查看>>
TextKit简单示例
查看>>
网格最短路径算法(Dijkstra & Fast Marching)(转)
查看>>
软链接和硬链接详解
查看>>
Redis_master-slave模式
查看>>
彻底卸载删除微软Win10易升方法
查看>>
SWT/JFACE之环境配置(一)
查看>>
应用程序日志中总是说MS DTC无法正确处理DC 升级/降级事件,是什么意思
查看>>
mybatis数据处理的几种方式
查看>>
作业2
查看>>
raid技术-研究感受
查看>>
远程主机探测技术FAQ集 - 扫描篇
查看>>
C++中调用python函数
查看>>
Nomad添加acl认证
查看>>