intgetDigit(int num) { int sum = 0; while (num > 0) { sum += num % 10; //个位数 num /= 10; //十位数 } return sum; }
voidDFS(int row, int col, int m, int n, int k, vector<vector<bool>> &visited, int &count) { // 数组越界 if (row < 0 || row >= m || col < 0 || col >= n) return; // 坐标的数字和大于k if (getDigit(row) + getDigit(col) > k) return; // 访问过了 if (visited[row][col] == true) return;
visited[row][col] = true; count++; DFS(row + 1, col, m, n, k, visited, count); //向下搜索 DFS(row, col + 1, m, n, k, visited, count); //向右搜索 }
intmovingCount(int m, int n, int k) { //!!!二维数组初始化并定义大小和初值 vector<vector<bool>> visited(m, vector<bool>(n, false)); int count = 0; DFS(0, 0, m, n, k, visited, count); return count; }
vector<int> spiralOrder(vector<vector<int>> &matrix) { vector<int> res; if (matrix.size() == 0) { return {}; } int T(0), L(0), B(matrix.size() - 1), R(matrix[0].size() - 1); // 顶点坐标 // 检测是否打印完了所有圈 while (T <= B && L <= R) { // 左到右打印:(T,L)->(T,R) for (int i = L; i <= R; i++) { res.push_back(matrix[T][i]); } // 从上到下打印:(T,R)->(B,R) for (int i = T + 1; i <= B; i++) { res.push_back(matrix[i][R]); } // 判断是否是单行或者单列 if (L < R && T < B) { // 从右到左打印:(B,R)->(B,L) for (int i = R - 1; i >= L; i--) { res.push_back(matrix[B][i]); } // 从下到上打印:(B,L)->(T,L) for (int i = B - 1; i > T; i--) { res.push_back(matrix[i][L]); } } // 一圈打印完了,顶点坐标移动 T++; L++; B--; R--; } return res; }