题目分析:因为只能用k的空间,所以考虑递归。但是递归超过了时间,所以考虑特性,每个值是前liang两个值得和,倒序计算。
class Solution(object):
def kthSmallest(self, rowIndex):
# res = [0 for _ in range(rowIndex+1)]
# res[0] = 1
# res[-1] = 1
# for i in range(1, (rowIndex+1)//2+(rowIndex+1)%2):
# res[i] = self.s(rowIndex, i)
# for j in range((rowIndex+1)//2+(rowIndex+1)%2, rowIndex+1):
# res[j] = res[rowIndex-j]
# return res
#
# def s(self, row, colum):
# if colum == 0 or row == colum:
# return 1
# else:
# return self.s(row-1, colum-1)+self.s(row-1, colum)
result = [1]
if rowIndex == 0:
return result
result.append(1)
if rowIndex == 1:
return result
for i in range(2, rowIndex + 1):
result.append(1)
n = len(result)
# 逆序的原因是防止前面变了影响后面
for j in range(n - 2, 0, -1):
if (j >= n // 2):
result[j] = result[j] + result[j - 1]
else:
result[j] = result[n - 1 - j]
return result