整数拆分为若干个2的幂数相加

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了整数拆分为若干个2的幂数相加相关的知识,希望对你有一定的参考价值。

参考技术A 一个正整数可以表示为多个正整数相加的表达式,表达式中的各个正整数要求都是2的幂。例如给定正整数7,它有下列六个符合要求的表达式:
1)1+1+1+1+1+1+1
2)1+1+1+1+1+2
3)1+1+1+2+2
4)1+1+1+4
5)1+2+2+2
6)1+2+4
因此,正整数7符合条件的表达式个数是6.
编写一个程序,对于给定的正整数N(1 <= N <= 1,000),输出符合条件的表达式个数。
要求:时间复杂度不高于O(N)。
输入描述:一个整数(>=1并且<=1000)
输出描述:表达式个数
示例1:
输入7
输出6

使用的是数学的方法。

这种方法太巧妙了!!

在例如,17, k=8 , dp[23]=dp[23]+dp[15] , dp[15]=dp[15]+dp[7] ,这里的 dp[7] 就等于,7由 1,2,4 拆分的可能结果

使用深度优先搜索的变形。
在遍历过程中要保证不能重复,这里使用:总是先分解出大数,从达到小的顺序排列来保证。
例如11=4+4+2+1。而后续的遍历过程中不会出现11=4+2+4+1

以上是关于整数拆分为若干个2的幂数相加的主要内容,如果未能解决你的问题,请参考以下文章

巧妙思维:2的幂数

把正整数n拆分为若干个(不少于2个)连续正整数之和-枚举法

整数拆分

整数拆分

Js中带有小数的值相加减的解决方案

打印正整数n拆分的所有情况