Python版本描述
显然,偶数台阶的跳法数等于之前所有奇数台阶的跳法数之和;
奇数台阶的跳法数等于之前所有偶数台阶的跳法数之和
故:

class Solution:
    def solve(self , n , m , a ):
        mask = a[::-1]

        wmatrix = [0 for i in range(n+1)]
        wmatrix[0] = 1

        for i in range(1,n+1):
            if mask and i == mask[-1]:
                wmatrix[i] = 0
                mask.pop()
            else:
                if i%2==0:
                    #注:偶数台阶的跳法数等于之前所有奇数台阶的跳法数之和
                    wmatrix[i] = sum(wmatrix[1:i:2]) % (1e9+7) 
                else:
                    #注:奇数台阶的跳法数等于之前所有偶数台阶的跳法数之和
                    wmatrix[i] = sum(wmatrix[0:i:2]) % (1e9+7)

        return wmatrix[-1] % (1e9+7)