int movingCount(int threshold, int rows, int cols) { // 计数器 int count = 0; // 记录某坐标能否到达的标记 vector<vector<int>> flags; for(int i = 0; i < rows; i++) { // 计算行号的 threshold int ts_r = i/10 + i%10; //定义当前行的flags vector<int> line; for(int j = 0; j < cols; j++) { //当前坐标的 threshold int ts = ts_r + j/10 + j%10; // 1, ts <= threshold 是可达的必要条件 // 2, [0, 0] 为 可达的 初始条件 // 3, [i-1, j] 可达 或 [i, j-1] 可达, 为[i, j] 可达的必要条件 if (ts <= threshold && ((i==0&&j==0) || (i >0 && flags[i-1][j] == 1) || (j > 0 && line[j - 1] == 1))) { count++; line.push_back(1); } else { line.push_back(0); } } flags.push_back(line); } return count; }