首页 > 试题广场 >

圆环回原点

[编程题]圆环回原点
  • 热度指数:3808 时间限制: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 
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int整型
     * @return int整型
     */
    private static final int MOD = 1000000007;
    public int circle (int n) {
        // dp[i][j]表示走i步到达点编号j的方法种数
        int[][] dp = new int[n + 1][10];
        dp[0][0] = 1;
        for (int i = 1; i <= n; i++) {
            for (int j = 0; j <= 9; j++) {
                dp[i][j] = (dp[i - 1][(j - 1 + 10) % 10] + dp[i - 1][(j + 1) % 10]) % MOD;
            }
        }
        return dp[n][0];
    }
}

发表于 2025-11-08 00:04:40 回复(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)