首页 > 代码库 > 把数字拆分成2的幂的和
把数字拆分成2的幂的和
问题:
任何数都能分解成2的幂,比如
7=1+1+1+1+1+1+1
=1+1+1+1+1+2
=1+1+1+2+2
=1+2+2+2
=1+1+1+4
=1+2+4
共有6种分解方式,设f(n)为任意正整数可能分解总数,比如f(7)=6
写个算法,输入数,求出其分解的总数。
思路:
先按照树形结构,把一个数可能的2的幂的子数记录下来,比如7拆分成7个1,3个2,1个4。从高到底遍历所有可能的搭配。
import math import copy def get_distribute_for_number(number): distribute = {} distribute[0] = number for i in range(0, int(math.log(number, 2) + 1)): if i not in distribute: break count_i = distribute[i] while count_i >= 2: count_i -= 2 if i + 1 not in distribute: distribute[i + 1] = 0 distribute[i + 1] += 1 return distribute def count_by_distribute(distribute, number, parent_expr): if number == 0: print("expr : %s"%parent_expr[:-3]) return 1 max_leaf = len(distribute) - 1 if max_leaf == 0: print("expr : %s"%(parent_expr + " 1 * %d"%number)) return 1 curr_distribute = copy.copy(distribute) max_leaf_value = http://www.mamicode.com/2 ** max_leaf >把数字拆分成2的幂的和
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。