У меня есть вопрос для интервью:
Существует лестница с N ступенями, и вы можете подняться на любое количество ступеней из набора натуральных чисел X? Например, если X = {1, 3, 5}, вы можете подняться на 1, 3 или 5 шагов одновременно.
Я получил приведенную ниже реализацию, и, похоже, она работает.
У меня есть несколько вопросов о моем подходе:
1.Что будет обозначение Big-O для этого фрагмента кода?
2. Есть ли лучший подход, учитывающий сложность?
def stairA(N,X):
print("begin")
print(N)
print(X)
print(len(X))
print("end")
total=0
if(len(X)==0):
print("space_Z")
return 0
if (len(X)>0):
if(X[len(X)-1]>N):
print("space_A")
newlist = [k for k in X if k < X[len(X)-1]]
stairA(N,newlist) #step size greater than stair number
#stairA(N,X[:len(T)-1]) #step size greater than stair number
if (N==1):
if(1 in X):
print("space_B")
return 1
if (N==0):
print("space_X")
return 1
if (N<0):
print("space_Y")
return 0
for ind,ele in enumerate(X):
a=N-ele
stairA(a,X)#what first step we take
total = total + stairA(a,X)#what first step we take
return total
Результаты:
1+1+1+1
1+2+1
1+1+2
1+3
2+1+1
2+2
3+1
Y=[3,1,2]
Y.sort()
print(Y)
stairA(4,Y)