Question
给出一个从小到大排好序的整数数组 nums 和一个整数 n,在数组中添加若干个补丁(元素)使得 [1,n] 的区间内的所有数都可以表示成 nums 中若干个数的和。返回最少需要添加的补丁个数。
Example1:
nums = [1, 3], n = 6
返回1,表示至少需要添加1个数{2},才可以表示1到6之间所有数。
Example2:
nums = [1, 5, 10], n = 20
返回2,表示至少需要添加两个数{2,4},才可以表示1到20之间所有数。
Answer
def Solution(Source, Des):
Sum = 0;
j = 0;
Index = 0
AddData = []
if(Source[0]==1 & len(Source)>1):
Sum = 1;
j = 0;
while(Sum<Des):
if( j< len(Source) ):
Sum = Sum + Source[j];
j = j+1
if pow(2, j) not in Source:
AddData.append(pow(2, j))
Sum = Sum + AddData[Index]
Index = Index + 1
return AddData;
#Source = [1, 2, 5]
#Des = 9
#Source = [1, 2]
#Des = 9
Source = [1,2,10]
Des = 30
Solution(Source, Des)