题目描述:
题解:动态规划
1.创建一个长度为len(nums)+1的数组dp,全部初始化为0,一个记录最终结果的result。
2.i从2开始,如果nums[i]-nums[i-1]==nums[i-1]-nums[i-2],dp[i]=dp[i-1]+1,否则dp[i]=0,result=result+dp[i]
思路是:
如果本来前nums[0]-nums[i-1]是一个有dp[i-1]个子等差数列的数组,nums[i]保持这个规律,nums[i]-nums[i-1]==nums[i-1]0nums[i-2],那么nums[1]到nums[i]和nums[0]-nums[i-1]相同,也会有dp[i-1]个子等差数列,然后再加上nums[0]-nums[i],所以result要加上dp[i-1]+1
class Solution: def numberOfArithmeticSlices(self, nums: List[int]) -> int: if len(nums)<3: return 0 result = 0 dp = [0 for i in range(len(nums))] if nums[2]-nums[1]==nums[1]-nums[0]: dp[2] = 1 for i in range(2,len(nums)): if nums[i]-nums[i-1]==nums[i-1]-nums[i-2]: dp[i] = dp[i-1]+1 else: dp[i]=0 result = result+dp[i] return result