public class Solution { private int _m; private int _n; public int UniquePaths(int m, int n) { _m = m; _n = n; int count = 0; RecordPaths(0, 0, ref count); return count; } private void RecordPaths(int i, int j, ref int count) { if (i == _m - 1 && j == _n - 1) { count++; return; } if (i < _m) { RecordPaths(i + 1, j, ref count); } if (j < _n) { RecordPaths(i, j + 1, ref count); } } }
public class Solution { public int ClimbStairs(int n) { if (n <= 2) return n; int first = 1; int second = 2; int result = 0; for (int i = 3; i <= n; i++) { result = first + second; first = second; second = result; } return result; } }
public class Solution { private IList<IList<int>> _result; public IList<IList<int>> Subsets(int[] nums) { _result = new List<IList<int>>(); int len = nums.Length; if (len == 0) { return _result; } IList<int> item = new List<int>(); Find(nums, 0, item); return _result; } private void Find(int[] nums, int begin, IList<int> item) { _result.Add(new List<int>(item)); if (begin == nums.Length) return; for (int i = begin; i < nums.Length; i++) { item.Add(nums[i]); Find(nums, i + 1, item); item.RemoveAt(item.Count - 1); } } }