力扣LCR 130. 衣橱整理(DFS 解法)

2023-12-16 23:12

本文主要是介绍力扣LCR 130. 衣橱整理(DFS 解法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Problem: LCR 130. 衣橱整理

文章目录

  • 题目描述
  • 思路
  • 解题方法
  • 复杂度
  • Code

题目描述

在这里插入图片描述

思路

首先该问题可以归纳为一类遍历二维矩阵的题目,此类中的一部分题目可以利用DFS来解决,具体到本题目:

我们可以利用一个布尔类型的二维数组记录我们已经访问过的可以访问的位置(访问过则记录为true),再同时在每次遍历时我们判断当前的位置是否可以访问(依据题目要求其横纵坐标的数位和要小于给定的数字cnt),以及当前位置的上、下、左、右四个方位是否可以继续访问。

解题方法

1.定义布尔类型的二维数组(大小为mn)用于记录已经访问过的可以访问的位置。定义int类型的变量count记录可以访问的位置个数;
2.编写判断当前横纵坐标数位和是否大于给定数的函数check;
3.编写深度优先函数:

3.1每次先将当前位置标记为true,count加一
3.1用一个二维数组**int[][] directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};记录某个位置的上下左右四个方位的位置,便于DFS,
3.2for循环(从1-4表示查找四个方位),每次执行
令newI = i + directions[di][0];newJ = j + directions[di][1];**表示下一个待选位置的横纵坐标
3.3判断下一个待选位置的横纵坐标是否合法(横纵坐标不越界,没有被合法访问过,数位和小于给定数)

复杂度

时间复杂度:

O ( m n ) O(mn) O(mn)

空间复杂度:

O ( m n ) O(mn) O(mn)

Code

class Solution {private boolean[][] visited;private int count = 0;/*** Get the maximum number of collations** @param m   The maximum range of the horizontal coordinate* @param n   The maximum range of the ordinate* @param cnt Given number* @return int*/public int wardrobeFinishing(int m, int n, int cnt) {visited = new boolean[m][n];dfs(0, 0, m, n, cnt);return count;}/*** Use DFS to get the maximum number of collations** @param i Abscissa* @param j Ordinate* @param m The maximum range of the horizontal coordinate* @param n The maximum range of the ordinate* @param k Given number*/private void dfs(int i, int j, int m, int n, int k) {//Mark the current locationvisited[i][j] = true;count++;//The current position of the location of the four directionsint[][] directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};for (int di = 0; di < 4; ++di) {int newI = i + directions[di][0];int newJ = j + directions[di][1];if (newI >= m || newI < 0 || newJ >= n || newJ < 0|| visited[newI][newJ] == true || check(newI, newJ, k) == false) {continue;}dfs(newI, newJ, m, n, k);}}/*** Determine if the sum of digits is less than k** @param i Abscissa* @param j Ordinate* @param k Given number* @return boolean*/private boolean check(int i, int j, int k) {int sum = 0;while (i != 0) {sum += (i % 10);i /= 10;}while (j != 0) {sum += (j % 10);j /= 10;}return sum <= k;}
}

这篇关于力扣LCR 130. 衣橱整理(DFS 解法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/502239

相关文章

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

力扣SQL50 每位经理的下属员工数量 join

Problem: 1731. 每位经理的下属员工数量 👨‍🏫 参考题解 Code select m.Employee_id, m.name,count(*) reports_count,round(avg(e.age),0) average_agefrom Employees ejoin Employees mon e.reports_to = m.Employee_id

android的strings整理脚本

统一对String整理的工具,结构如下 代码 package com.owant.toollib;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.util.ArrayList;import java.util.List;import java.util

IPython使用技巧整理

以下是一些常见且有用的IPython使用技巧,整理如下: 一、基本功能 1. 启动IPython:在终端输入`ipython`命令即可启动IPython环境。 2. 自动补全:使用`Tab`键进行变量和函数名的自动补全。例如,输入`pri`后按`Tab`键,会自动补全为`print`。 二、魔法命令(Magic Commands) 1. %timeit:用来计时小段代码的执行时间

力扣SQL50 游戏玩法分析 IV 子查询

Problem: 550. 游戏玩法分析 IV 👨‍🏫 参考题解 这个SQL查询的目的是计算每个玩家在登录后的第二天参与活动的比例。查询使用了子查询和左连接来实现这一目的。下面是查询的详细解释,包括每个部分的作用和注释: -- 计算每个玩家登录后第二天参与活动的比例select round(avg(a.event_date is not null), 2) as fractio

力扣-2663

题目 如果一个字符串满足以下条件,则称其为 美丽字符串 : 它由英语小写字母表的前 k 个字母组成。它不包含任何长度为 2 或更长的回文子字符串。 给你一个长度为 n 的美丽字符串 s 和一个正整数 k 。 请你找出并返回一个长度为 n 的美丽字符串,该字符串还满足:在字典序大于 s 的所有美丽字符串中字典序最小。如果不存在这样的字符串,则返回一个空字符串。 对于长度相同的两个字符串 a

力扣SQL50 超过5名学生的课

Problem: 596. 超过5名学生的课 Code select classfrom coursesgroup by classhaving count(distinct student) >= 5;

力扣刷题 杨辉三角(使用c++ vector解法)

杨辉三角 题目描述示例1示例2提示:代码 题目描述 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例1 输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例2 输入: numRows = 1

【K8S运维】整理常见使用命令

*特别提醒: 文件复制类的命令,执行命令等需要谨慎确定命令执行后的效果,否则一旦出错就不可逆!!! 命令概览 序号使用场景命令格式使用样例命令使用说明1查询集群节点有多少kubectl get nodes2查询集群运行哪些podkubectl get pods -o wide -A3查询指定pod名称的pod信息kubeclt get pods -o wide -A|grep <具体pod对象

力扣SQL50 求关注者的数量 分组计数

Problem: 1729. 求关注者的数量 Code select user_id, count(1) followers_countfrom Followers group by user_idorder by user_id;