public class Solution { private static int Right(List row, int size, int idx) { if (idx >= size) { return 0; } return row[idx]; } public int UniquePaths(int m, int n) { var bottom = new List(Enumerable.Repeat(1, n)); for (var y = m - 2; y >= 0; --y) { var above = new List(Enumerable.Repeat(0, n)); for (var x = n - 1; x >= 0; --x) { above[x] = Right(above, n, x + 1) + bottom[x]; } bottom = above; } return bottom[0]; } }