数据结构学习 jz13衣橱整理

news2025/1/18 20:16:24

关键词:搜索算法 dfs bfs 回溯

题目:

各数位之和:

求法代码:

    int sums(int x)
    {
        int s=0;
        while(x!=0)
        {
            s+=x%10;
            x=x/10;
        }
        return s;
    }

总的思路:

这道题是求可以到达的格子数,想到可以用搜索算法来做,可以用dfs或者bfs。

可以去看这位大佬的分析。我基本是按照他的思路写的,但是把代码写的好看了一些。求各数位之和我用了封装好的sums函数,看起来舒服一些。

我一开始用传统的dfs做不出来也不知道为什么。

解法一:dfs 回溯

思路:

复杂度计算:

时间复杂度O(nm)

空间复杂度O(nm)

代码:

class Solution {
public:
    int wardrobeFinishing(int m, int n, int cnt) {
        vector<vector<int>> visited(m,vector<int>(n));
        return dfs(0,0,0,0,visited,m,n,cnt);
    }
    int dfs(int i,int j,int si,int sj,vector<vector<int>>& visited,int m,int n,int cnt)
    {
        if(si+sj>cnt||i>=m||j>=n||visited[i][j]) return 0;//中止条件
        visited[i][j]=1;//标记
        return 1+dfs(i+1,j,sums(i+1),sj,visited,m,n,cnt)+dfs(i,j+1,si,sums(j+1),visited,m,n,cnt);
    }
    int sums(int x)
    {
        int s=0;
        while(x!=0)
        {
            s+=x%10;
            x=x/10;
        }
        return s;
    }
};

解法二:bfs

思路:

 

复杂度计算:

时间复杂度O(nm)

空间复杂度O(nm)

代码:

class Solution {
public:
    int wardrobeFinishing(int m, int n, int cnt) {
        vector<vector<int>> visited(m,vector<int>(n));
        int res=0;
        queue<vector<int>> que;
        que.push({0,0,0,0});
        while(!que.empty())
        {
            vector<int> x=que.front();
            que.pop();
            int i=x[0],j=x[1],si=x[2],sj=x[3];
            if(i>=m||j>=n||si+sj>cnt||visited[i][j])
                continue;
            visited[i][j]=1;
            res++;
            que.push({i+1,j,sums(i+1),sj});
            que.push({i,j+1,si,sums(j+1)});
            
        }
        return res;
    }

    int sums(int x)
    {
        int s=0;
        while(x!=0)
        {
            s+=x%10;
            x=x/10;
        }
        return s;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1340148.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity中Shader 齐次坐标

文章目录 前言一、什么是齐次坐标二、齐次坐标增加分量 w 的意义1、当 w ≠ \neq  0时&#xff1a;2、当 w 0时&#xff1a;3、用方程组&#xff0c;直观的看一下w的意义 前言 在之前的文章中&#xff0c;我们进行了正交相机视图空间转化到裁剪空间的推导。 Unity中Shade…

独立站:品牌建设的新高地

一、引言 在当今的商业环境中&#xff0c;品牌建设已成为企业成功的关键因素之一。随着电子商务的迅猛发展&#xff0c;独立站已成为品牌建设的新高地&#xff0c;为企业提供了展示品牌形象、扩大知名度和美誉度的平台。本文将深入探讨独立站在品牌建设中的优势和应用&#xf…

C++实现令牌桶过滤算法

什么是令牌桶算法 令牌桶算法通过限制令牌桶的固定容量&#xff0c;实现对资源以及流量的延迟控制。请求者需先获取令牌&#xff0c;方可执行动作。若令牌桶内具有足够令牌便可通过消耗相等数量放过请求&#xff1b;而若令牌不足&#xff0c;则会拒绝请求。 该算法具备平滑的…

OpenStack搭建和部署

Centos官网qcow2镜像修改root账号密码&#xff0c;开启ssh等 wget http://172.16.20.10/vmtemplate/KVM/wangrui/Debian/debian-10.2.0-openstack-amd64.qcow2 一、查看镜像文件信息 [debian-10.2-cloud] nameDebian 10.2.0 (Buster) Cloud osinfodebian10 archx86_64 fi…

洛谷P1498 南蛮图腾

题目背景 自从到了南蛮之地&#xff0c;孔明不仅把孟获收拾的服服帖帖&#xff0c;而且还发现了不少少数民族的智慧&#xff0c;他发现少数民族的图腾往往有着一种分形的效果&#xff0c;在得到了酋长的传授后&#xff0c;孔明掌握了不少绘图技术&#xff0c;但唯独不会画他们…

nginx原理和配置项详解

一、nginx原理 Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP代理服务器。其工作原理和配置项如下&#xff1a; 工作原理&#xff1a; 反向代理&#xff1a;Nginx可以作为反向代理服务器&#xff0c;接收客户端的请求&#xff0c;然后将请求转…

GIT提交、回滚等基本操作记录

1、add文件时warning: LF will be replaced by CRLF in .idea/workspace.xml. 原因&#xff1a;windows中的换行符为 CRLF&#xff0c; 而在Linux下的换行符为LF&#xff0c;所以在执行add . 时会出现以下提示 解决&#xff1a;git config core.autocrlf false 2、GIT命令&…

【linux】如何查看服务器磁盘IO性能

查看服务器磁盘IO性能 在服务器运维过程中&#xff0c;了解服务器的磁盘IO性能是非常重要的。磁盘IO性能直接影响到服务器的响应速度和处理能力。本文将介绍如何使用dd命令来查看服务器磁盘IO性能。 1. 什么是dd命令&#xff1f; dd命令是Linux系统中的一个非常强大的工具&a…

C++ 之LeetCode刷题记录(三)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅&#xff0c;多学多练&#xff0c;尽力而为。 先易后难&#xff0c;先刷简单的。 13、罗马数字转整数 罗马数字包含以下七种字符: I&#xff0c…

Java开发框架和中间件面试题(8)

目录 82.Mybatis一级缓存&#xff0c;二级缓存&#xff1f; 83.Mybatis如何防止SQL注入&#xff1f; 84.mybatis中resultType和resultMap有什么区别&#xff1f; 85.如何在SpringBoot中禁用Actuator断点安全性&#xff1f; 86.什么是SpringBoot&#xff1f;SpringBoot有哪些…

1.3MySQL中的自连接

自己的表和自己连接&#xff0c;核心&#xff1a;一张表拆为两张一样的表。 语法&#xff1a;select 字段列表 from 表 [as] 表别名1,表 [as] 表别名2 where 条件...; 关于怎样把一个表拆分成一个表&#xff0c;只要给它们分别取别名就行 categoryidpidcategoryname21信息…

单片机外设矩阵键盘之行列扫描识别原理与示例

单片机外设矩阵键盘之行列扫描识别原理与示例 1.概述 这篇文章介绍单片机通过行列扫描的方式识别矩阵键盘的按键&#xff0c;通过程序执行相应的操作。 2.行列扫描识别原理 2.1.独立按键识别原理 为什么需要矩阵按键 独立按键操作简单&#xff0c;当数量较多时候会占用单片机…

Flink1.17实战教程(第二篇:DataStream API)

系列文章目录 Flink1.17实战教程&#xff08;第一篇&#xff1a;概念、部署、架构&#xff09; Flink1.17实战教程&#xff08;第二篇&#xff1a;DataStream API&#xff09; Flink1.17实战教程&#xff08;第三篇&#xff1a;时间和窗口&#xff09; Flink1.17实战教程&…

MYSQL一一外键约束

概念&#xff1a;外键用来让两张表的数据之间建立联系&#xff0c;从而保证数据的一致性和完整性 建立外键&#xff1a; ①这是在建立表的时候建立外键的方法 ②这是在建立完表之后建立外键的方法&#xff1a; 删除外键&#xff1a; 现在有一张员工表&#xff08;emp&#xf…

【easy-ES使用】1.基础操作:增删改查、批量操作、分词查询、聚合处理。

easy-es、elasticsearch、分词器 与springboot 结合的代码我这里就不放了&#xff0c;我这里直接是使用代码。 基础准备&#xff1a; 创建实体类&#xff1a; Data // 索引名 IndexName("test_jc") public class TestJcES {// id注解IndexId(type IdType.CUSTOMI…

C#获取windows系统资源使用情况

1.前言 之前有一篇博客介绍如何获取Linux服务器上的资源使用情况《Java 获取服务器资源&#xff08;内存、负载、磁盘容量&#xff09;》&#xff0c;这里介绍如何通过C#获取Window系统的资源使用。 2.获取服务器资源 2.1.内存 [DllImport("kernel32.dll")][retu…

CSDN规则详解——csdn那些你不知道的事儿(点赞、评论、收藏)

文章目录 每日一句正能量前言点赞评论收藏原力等级和博客等级后记 每日一句正能量 “只有奋斗者才能成为胜利者&#xff0c;只有坚持者才能创造奇迹。” - 迈克尔乔丹 这句话来自于世界著名篮球运动员迈克尔乔丹&#xff0c;他以无与伦比的天赋和努力成为了篮球界的传奇人物。他…

产品经理如何培养思维模式和创新能力?

作为一名产品经理&#xff0c;我们需要具备一定的思维模式和创新能力&#xff0c;以应对不断变化的市场和技术环境。在本文中&#xff0c;我将分享一些培养产品经理思维模式和创新能力的方法。 一、培养市场洞察力 作为产品经理&#xff0c;我们需要深入了解市场和用户需求&a…

表单(HTML)

<!DOCTYPE html> <html><head><meta charset"utf-8"><title>个人信息</title></head><body><h1>个人信息</h1><form><fieldset><legend>基本信息</legend><label for"…

【日常聊聊】编程语言的未来:趋势、多样性、人工智能融合、教育与生态系统

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; 日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言&#xff1a; 正文 1. 编程语言的发展趋势 1.1 新语言和编程范式的涌现 1.2 影响和挑战 2. 编程语言的多样性 2.1 互操作性和可移…