1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
struct Solution; const MOD: i64 = 1_000_000_007; impl Solution { fn num_of_ways(n: i32) -> i32 { let n = n as usize; let mut a121: i64 = 6; let mut a123: i64 = 6; for _ in 1..n { let b121 = a121 * 3 + a123 * 2; let b123 = a121 * 2 + a123 * 2; a121 = b121 % MOD; a123 = b123 % MOD; } ((a121 + a123) % MOD) as i32 } } #[test] fn test() { let n = 1; let res = 12; assert_eq!(Solution::num_of_ways(n), res); let n = 2; let res = 54; assert_eq!(Solution::num_of_ways(n), res); let n = 7; let res = 106494; assert_eq!(Solution::num_of_ways(n), res); let n = 5000; let res = 30228214; assert_eq!(Solution::num_of_ways(n), res); }