我是否可以制定一种算法,该算法将使用数字列表(范围为1-470)和加起来组成数字的代码(L12 = 2,L11 = 7,L10 = 20,L9 = 20,L8 = 70 ,L7 = 200,R12 = 1,R11 = 4,R10 = 10,R9 = 40,R8 = 100),并创建一个L和R代码列表,使用最少的代码将这些数字加起来仅使用一次。
例如1:R12,2:L12,3:R12 L12,
但是如果我有一个像40这样的数字,则我需要算法仅吐出R9作为选项,而不吐出R = L9,R10,L11,L12,R12这也加起来40
def translate(num):
code_map = {200:['L7'],100:['R8'],70:['L8'],40:['R9'],20:['L10','L9'],
10:['R10'],7:['L11'],4:['R11'],2:['L12'],1:['R12']}
translation = ''
for value, codes in code_map.items():
while num >= value and len(codes) > 0:
translation += codes.pop(0) + ','
num -= value
return translation[:len(translation) - 1]