杨辉三角形/组合数(python)
·
import sys
def combine(n,k)->int:
if k>n or k<0:
return 0
if k==0 or k==n:
return 1
dp=[[0]*(k+1) for _ in range(n+1)] #创建dp数组,防止越界
dp[0][0]=0
for i in range(n+1): #遍历每一行
dp[i][0]=1 #每一行第一个元素为1
upper=min(i,k) #确定该行可以遍历到什么位置,不能超过k和当前i
for j in range(1,upper+1):
dp[i][j]=dp[i-1][j-1]+dp[i-1][j] #递推式
return dp[n][k]
def main():
try:
print("请输入:")
line=sys.stdin.readline().strip() #读取一行,去掉前后空格,返回字符串
if not line:
return
nums=list(map(int,line.split())) #将字符串以空格分开,转成int,返回列表
res=combine(nums[0],nums[1])
print(res)
return
except ValueError:
return
if __name__=="__main__":
main()
描述:
组合数: 从n个物品里面选k个,共有多少种方法? 可以选0个至k个,即C(n,k)
杨辉三角:每行第一个数和最后一个数字都为1,dp数组,dp[i][j],表示在i个里面选j个有dp[i][j]种方法,递推式dp[i][j]=dp[i-1][j-1]+dp[i-1][j],即当前的数等于其左上角的数加上右上角的数。
更多推荐


所有评论(0)