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 35 36 37 38
| class Solution { public: int movingCount(int m, int n, int k) { int maxStep = 0; vector<vector<bool>> memo(m, vector<bool>(n, false)); backTrack(m, n, k, maxStep, 0, 0, memo); return maxStep; } private: void backTrack(int m, int n, int k, int& maxStep, int i, int j, vector<vector<bool>>& memo) { if(i >= m || i < 0 || j >= n || j < 0 || memo[i][j]) return; memo[i][j] = true; int sum = 0; int it = i, ij = j; while(it) { sum += it % 10; it /= 10; } while(ij) { sum += ij % 10; ij /= 10; } if(sum > k) return; else { ++maxStep; backTrack(m, n, k, maxStep, i + 1, j, memo); backTrack(m, n, k, maxStep, i - 1, j, memo); backTrack(m, n, k, maxStep, i, j + 1, memo); backTrack(m, n, k, maxStep, i, j - 1, memo); } } };
|