## Algorithm

Problem Name: 446. Arithmetic Slices II - Subsequence

Given an integer array `nums`, return the number of all the arithmetic subsequences of `nums`.

A sequence of numbers is called arithmetic if it consists of at least three elements and if the difference between any two consecutive elements is the same.

• For example, `[1, 3, 5, 7, 9]`, `[7, 7, 7, 7]`, and `[3, -1, -5, -9]` are arithmetic sequences.
• For example, `[1, 1, 2, 5, 7]` is not an arithmetic sequence.

A subsequence of an array is a sequence that can be formed by removing some elements (possibly none) of the array.

• For example, `[2,5,10]` is a subsequence of `[1,2,1,2,4,1,5,10]`.

The test cases are generated so that the answer fits in 32-bit integer.

Example 1:

```Input: nums = [2,4,6,8,10]
Output: 7
Explanation: All arithmetic subsequence slices are:
[2,4,6]
[4,6,8]
[6,8,10]
[2,4,6,8]
[4,6,8,10]
[2,4,6,8,10]
[2,6,10]
```

Example 2:

```Input: nums = [7,7,7,7,7]
Output: 16
Explanation: Any subsequence of this array is arithmetic.
```

Constraints:

• `1  <= nums.length <= 1000`
• `-231 <= nums[i] <= 231 - 1`

## Code Examples

### #1 Code Example with Javascript Programming

```Code - Javascript Programming```

``````
const numberOfArithmeticSlices = function(A) {
if (!A || A.length < 3) return 0;
let res = 0;
const dp = Array(A.length);
for (let i = 0; i < A.length; i++) {
dp[i] = new Map();
for (let j = 0; j < i; j++) {
const diff = A[i] - A[j];
const prevCount = dp[j].get(diff) || 0;
res += prevCount;
const currCount = (dp[i].get(diff) || 0) + 1;
dp[i].set(diff, prevCount + currCount);
}
}
return res;
};
``````
Copy The Code &

Input

cmd
nums = [2,4,6,8,10]

Output

cmd
7

### #2 Code Example with Python Programming

```Code - Python Programming```

``````
class Solution:
def numberOfArithmeticSlices(self, A):
dp, res = collections.defaultdict(dict), 0
for j in range(len(A)):
for i in range(j):
dp[j][A[j] - A[i]] = dp[j].get(A[j] - A[i], 0) + dp[i].get(A[j] - A[i], 1)
if A[j] - A[i] in dp[i]: res, dp[j][A[j] - A[i]] = res + dp[i][A[j] - A[i]], dp[j][A[j] - A[i]] + 1
return res
``````
Copy The Code &

Input

cmd
nums = [2,4,6,8,10]

Output

cmd
7