Bootstrap

python-leetcode-最长递增子序列的个数

673. 最长递增子序列的个数 - 力扣(LeetCode)

class Solution:
    def findNumberOfLIS(self, nums: List[int]) -> int:
        if not nums:
            return 0
        
        n = len(nums)
        dp = [1] * n  # 记录最长递增子序列的长度
        count = [1] * n  # 记录对应长度的子序列个数
        max_length = 1  # 记录最长递增子序列的最大长度
        
        for i in range(n):
            for j in range(i):
                if nums[j] < nums[i]:  # 递增关系
                    if dp[j] + 1 > dp[i]:  
                        dp[i] = dp[j] + 1
                        count[i] = count[j]  # 继承数量
                    elif dp[j] + 1 == dp[i]:  
                        count[i] += count[j]  # 增加新的路径数量
            
            max_length = max(max_length, dp[i])  # 记录最长序列的长度
        
        # 统计所有最长序列的个数
        return sum(count[i] for i in range(n) if dp[i] == max_length)

;