题目:
class Solution {
public:
int m, n, cnt, res=0;
int digit(int n){
int sum = 0;
while(n){
sum += n%10;
n/=10;
}
return sum;
}
void traversal(int i, int j, vector<vector<bool>>& used){
if(i>=m||j>=n||digit(i)+digit(j)>cnt||used[i][j]) return;
res++;
used[i][j]=true;
traversal(i+1, j, used);
traversal(i, j+1, used);
}
int wardrobeFinishing(int m, int n, int cnt) {
this->m = m;
this->n = n;
this->cnt = cnt;
vector<vector<bool>> used(m, vector<bool>(n, false));
traversal(0, 0, used);
return res;
}
};
class Solution { //本题的思路为递归法
public:
int cal(int i){ //先写个计算位数和的函数cal
int sum = 0;
while(i){
sum+=i%10;
i/=10;
}
return sum;
}
void traversal(int i, int j, int m, int n, int k, int& result, vector<vector<bool>>& visited){ //注意递归传入的参数有点多,顺序不要乱。result和visited必须要有&引用符号
if(i<0||j<0||i>=m||j>=n||cal(i)+cal(j) > k||visited[i][j]) return; //递归终止条件,也就是走到了不符合条件的格子:1.超出边界 2.位数和大于k 3.格子已经被访问过
visited[i][j] = true; //该格子符合条件,标记为true
result++; //结果+1
traversal(i+1, j, m, n, k, result, visited); //按照四个方向进行递归
traversal(i-1, j, m, n, k, result, visited);
traversal(i, j+1, m, n, k, result, visited);
traversal(i, j-1, m, n, k, result, visited);
}
int movingCount(int m, int n, int k) {
int result = 0; //初始化result
vector<vector<bool>> visited(m, vector<bool>(n, false)); //初始化visited标记矩阵
traversal(0, 0, m, n, k, result, visited);
return result;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具