代码随想录算法训练营第四十六天|LeetCode139.完全平方数

LeetCode 139 完全平方数

题目链接:139. 单词拆分 - 力扣(LeetCode)

【解题思路】

  • 1.确定dp数组以及下标含义

    • dp[j]的定义是:

      • 字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字典中出现的单词

    • 最终要返回的是dp[s.size]

  • 2.确定递推公式

    • 如果j到i这个区间出现在单词里,同时dp[j]==true的话

      • dp[i]=true

  • 3.确定dp数组如何初始化

    • dp[0]=true

  • 4.确定遍历顺序

    • 先遍历背包:

      • 再遍历物品:

        • 递推公式

    • Carl说先遍历物品是组合数,先遍历背包是排列数,对于这点,我的理解是:

      • 先遍历物品后遍历背包:

        • 1)外层固定物品1,进入内层循环

        • 2)背包容量不断增加

          • 物品1被重复添加进不同容量的背包中,直到背包容量遍历完毕

        • 3)背包容量遍历完毕后,执行下一次循环,开始添加物品2

          • 物品1已经被添加进每一个不同容量的背包里,因此物品2肯定会在物品1之后

      • 先遍历背包后遍历物品:

        • 1)外层循环固定背包容量

          • 在大小固定的背包里循环遍历添加物品,直到物品全遍历一次

        • 2)物品遍历结束,外层背包容量+1

          • 此时仍要执行内层循环,再次遍历一遍物品

          • 可能会出现如下情况:

            • 在上一轮遍历到物品3时,当前容量的背包已经没有办法塞入物品3,因此背包里此时有物品1和物品2

              • 在当前轮遍历的时候发现增加了容量的背包可以再添加一个物品1,就会有【物品1,物品2,物品1】这样的情况,所以很可能会有物品1出现在物品2之类的情况

    • 本题的单词顺序有着重要作用,因此可以看成求排列数,先遍历背包

  • 5.举例推导dp数组

    • 手动推导一下答案,然后将数组打印出来,看看每个状态是否是按照我们的思路进行转移

【解题步骤】

  • 1.创建一个HashSet,放wordDict

  • 2.新创建一个布尔类型的数组v,长度为字符串的长度+1

  • 3.初始化v[0]为true

  • 4.求排列数

    • 先遍历物品

      • 再遍历背包

        • 递推公式

  • 4返回

    • return v[s.length()]

【代码部分】

class Solution {public boolean wordBreak(String s, List<String> wordDict) {HashSet<String> set = new HashSet<>(wordDict);boolean[] v = new boolean[s.length()+1];v[0] = true;for(int i = 1 ; i <= s.length() ; i++){for(int j = 0 ; j <= i && !v[i] ; j++){if(set.contains(s.substring(j,i))&& v[j]){v[i] = true;}}}return v[s.length()];}
}

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

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

相关文章

[方法] Unity 实现仿《原神》第三人称跟随相机 v1.1

参考网址&#xff1a;【Unity中文课堂】RPG战斗系统Plus 在Unity游戏引擎中&#xff0c;实现类似《原神》的第三人称跟随相机并非易事&#xff0c;但幸运的是&#xff0c;Unity为我们提供了强大的工具集&#xff0c;其中Cinemachine插件便是实现这一目标的重要工具。Cinemachi…

4步快速配置Java和MySQL环境

每次入职一家新公司或者用一台其他的临时电脑或者新电脑时都要重新配置Java开发环境&#xff0c;很麻烦&#xff0c;因此我在这里记录一下快速配置环境的方式&#xff0c;四步搞定&#xff01;此处以win为操作系统进行讲解。 第一步&#xff1a;下载链接 下载链接&#xff1a…

二叉树1:二叉树的基本运算

1. (简答题) 编写一个程序&#xff0c;实现二叉树的基本运算&#xff0c;具体要求如下&#xff1a;&#xff08;指定示范实例1&#xff1a;P243图7.34。指定示范实例2&#xff1a;P201图7.13 &#xff09; 1&#xff0c;括号表示法输出该树。 2&#xff0c;输入一个结点的值&…

04.1.添加多个监控同步其他主机

添加多个监控&同步其他主机 1.首先在agent配置文件中存在Include的&#xff0c;也就是说明&#xff0c;可以配置多个监控项并且同步到其他主机上的进行使用&#xff1b; 2.主机之间互相推送配置文件即可&#xff1b; 开始测试 我这里实在agent节点上直接在路径/etc/zabbi…

Go实现树莓派控制舵机

公式说明 毫秒&#xff08;ms&#xff09;是时间的单位&#xff0c;赫兹&#xff08;Hz&#xff09;是频率的单位&#xff0c;而DutyMax通常是一个PWM&#xff08;脉冲宽度调制&#xff09;信号中表示最大占空比的值。以下是它们之间的关系和一些相关公式&#xff1a; 频率&…

Python内置函数min()详解

Python中的min()函数是一个内置函数&#xff0c;用于找出给定参数或可迭代对象中的最小值。 函数定义 min()函数可以有两种不同的使用方式&#xff1a; min(iterable, *[, defaultobj, keyfunc]) min(arg1, arg2, *args[, keyfunc])iterable&#xff1a;一个可迭代对象。def…

设计模式之建造者模式BuilderPattern(七)

一、建造者模式 建造者模式&#xff08;Builder Pattern&#xff09;使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 二、代码实例 1、OrderItem类 Data&#xff1a;这是Lombok中提供的Ge…

【linux软件基础知识】-cdev_alloc

struct cdev *cdev_alloc(void) {struct cdev *p = kzalloc(sizeof(struct cdev), GFP_KERNEL);if <

并发编程陷阱:32位CPU下long写操作的线程安全漏洞

1. 现象描述 1.1 Bug问题简述 在多线程环境下操作共享数据时&#xff0c;往往面临各种并发问题。其中&#xff0c;一种常见的情况是&#xff0c;即使一段代码在单线程下执行没有问题&#xff0c;当它在多线程环境下执行时&#xff0c;却可能由于线程安全问题导致意想不到的Bu…

ADS过孔---过孔建模自动化

当前快速建模的方法有两类&#xff1a;一是脚本自动化&#xff0c;也就是今天要分享的方法&#xff0c;但该方法需要工程师有基本的脚本编辑能力&#xff0c;然后根据自己的需要去修改&#xff0c;难度较大一点点&#xff1b;二是参数化建模&#xff0c;也就是在GUI界面输入相应…

百度语音识别开发笔记

目录 简述 开发环境 1、按照官方文档步骤开通短语音识别-普通话 2、创建应用 3、下载SDK 4、SDK集成 5、相关接口简单说明 5.1权限和key 5.2初始化 5.3注册回调消息 5.4开始转换 5.5停止转换 6、问题 简述 最近想做一些语音识别的应用&#xff0c;对比了几个大厂…

华为手机连接电脑后电脑无反应、检测不到设备的解决方法

本文介绍华为手机与任意品牌电脑连接时&#xff0c;出现连接后电脑无反应、检测不到手机连接情况的解决方法。 最近&#xff0c;因为手机的存储空间愈发紧缺&#xff0c;所以希望在非华为电脑中&#xff0c;将华为手机内的照片、视频等大文件备份、整理一下。因此&#xff0c;需…

aardio爬虫) 实战篇:逆向有道翻译web接口

前言 之前的文章把js引擎(aardio封装库) 微软开源的js引擎(ChakraCore))写好了&#xff0c;这篇文章整点js代码来测一下bug。测试网站&#xff1a;https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻译js逆向&#xff08;MD5加密&#xff0c;AES加密&…

cmake进阶:定义函数的内部变量

一. 简介 前一篇文章学习 cmake中的定义函数基本用法。文章如下&#xff1a; cmake进阶&#xff1a;定义函数的使用方法-CSDN博客 本文继续学习 cmake中的定义函数&#xff0c;主要学习函数的内部变量。 二. cmake进阶&#xff1a;定义函数的内部变量 上一篇文章说过&…

Elasticsearch:理解人工智能相似性搜索

理解相似性搜索&#xff08;也称为语义搜索&#xff09;的指南&#xff0c;这是人工智能最新阶段的关键发现之一。 最新阶段人工智能的关键发现之一是根据相似性搜索和查找文档的能力。相似性搜索是一种比较信息的方法&#xff0c;其基于含义而非关键字。 相似性搜索也被称为语…

Stable Diffusion学习记录

文章目录 前言电脑配置推荐环境搭建下载地址安装步骤步骤一&#xff0c;打开下载的秋叶整合包&#xff0c;路径秋叶整合包/sd-wenui-aki步骤二&#xff0c;打开下载好的sd-webui-aki-v4.8.7解压包 Stable Diffusion软件配置&#xff0c;插件安装&#xff0c;模型下载Stable Dif…

从ETL与ELT谈起,理解数仓的任务

最近有个朋友&#xff0c;有几十 PB 的异构数据&#xff0c;数据源包括 MySQL、DB2、Oracle、CSV、磁带机&#xff0c;等等&#xff0c;然后他需要把这些数据中的一些信息做关联整合&#xff0c;从这几十 PB 的数据中提取出若干业务字段到数据仓库&#xff0c;做统一分析。 数…

Codeforces Round 943 (Div. 3) C-G

C. Assembly via Remainders 思路&#xff1a; 我们可以注意到&#xff0c;数组的长度只有 500 500 500 &#xff0c;并且每个数的大小都在 500 500 500 以内&#xff0c;再看向这题&#xff0c;容易知道&#xff0c;当第一个数确定之后&#xff0c;之后所有的数字都会确定下…

uniapp自定义websocket类实现socket通信、心跳检测、连接检测、重连机制

uniapp自定义websocket类实现socket通信、心跳检测、检测连接、重连机制&#xff0c;仿vue-socket插件功能实现发送序列号进行连接检测&#xff0c;发送消息时42【key,value】格式&#xff0c;根据后端返回数据和需要接收到的数据做nsend与onSocketMessage的修改 import {publ…

leetcode-没有重复项的全排列-97

题目要求 思路 1.递归&#xff0c;如果num和n的元素个数一样就可以插入res中了&#xff0c;这个作为递归的结束条件 2.因为这个题是属于排列&#xff0c;并非组合&#xff0c;两者的区别是排列需要把之前插入的元素在回退会去&#xff0c;而组合不需要&#xff0c;因此会存在一…