首页 > 试题广场 >

圆环回原点

[编程题]圆环回原点
  • 热度指数:2988 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
圆环上有 10 个点,编号 0~9 。从 0 出发,每次可以顺时针或逆时针走一格,请问一共走且仅走 n 步回到原点的方法有多少种。

数据范围: ,由于答案可能会非常大,所以请对答案对 取模
示例1

输入

3

输出

0

说明

 无论如何也不可能走 3 步回到原点 
示例2

输入

2

输出

2

说明

可能的方案有 0->1->0, 0->9->0 
//每一个步骤的对应方法为左边编号的方法和右边编号的方法加和
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @return int整型
     */
    int circle(int n) {
        // write code here
        long long int dp[10][n+1];
        int mod =  1000000007;
        for(int i=0;i<=9;i++)
        {
            for(int j=0;j<=n;j++)
            {
                dp[i][j] = 0;
            }
        }
        dp[0][0] = 1;
        for(int m=1;m<=n;m++)
        {
            for(int i=0;i<=9;i++)
            {
                dp[i][m] = (dp[(i-1+10)%10][m-1]%mod+dp[(i+1+10)%10][m-1]%mod)%mod;
                
            }
        }
        //cout<<"dp[0][n] = "<<dp[0][n]<<endl;
        return dp[0][n];
    }
};

编辑于 2022-07-31 15:56:50 回复(0)