leetcode LCR.衣橱整理
一、题目描述
二、解题思路
整体思路
可以采用深度优先搜索+剪枝来解决这个问题。以示例1为例子,可以整理的衣橱(标红)如下图所示,所以示例一返回18:
具体思路
(1)函数功能:dfs函数用于从(i,j)位置开始,在m*n的二维矩阵内寻找各数位之和<=cnt的位置的数量;
(2)函数体:
<1>先将visited[i][j]赋值为true,表示当前位置已经访问;
<2>按照下、右的顺序进行探索,如果(x,y)未越界且未被访问,并且满足x,y各数位之和小于等于cnt,则将ret++,并对(x,y)位置递归调用dfs函数;
三、代码实现
class Solution {int ret;vector<vector<bool>> visited;
public:int wardrobeFinishing(int m, int n, int cnt) {//初始化全局变量ret=1;visited.resize(m,vector<bool>(n,false));dfs(m,n,0,0,cnt);return ret;}//向下、右探索int dx[2]={1,0};int dy[2]={0,1};//getsum函数用于求数字i各数位之和int getsum(int i){int sum=0;while(i){sum+=i%10;i/=10;}return sum;}void dfs(int m,int n,int i,int j,int cnt){visited[i][j]=true;for(int k=0;k!=2;k++){int x=i+dx[k];int y=j+dy[k];if(x>=0&&x<m&&y>=0&&y<n&&getsum(x)+getsum(y)<=cnt&&!visited[x][y]){ret++;dfs(m,n,x,y,cnt);}}}
};