从递归到memo到动态规划
//memo,记忆化搜索
class Solution {
int[][] memo;
public boolean wordBreak(String s, List<String> wordDict) {
int n=s.length();
memo=new int[n+1][n+1];
for(int i=0;i<=n;i++)
for(int j=0;j<=n;j++)
memo[i][j]=-1;
return breakWord(s,wordDict,0,n);
}
public boolean breakWord(String s,List<String> wordDict,int l,int r)
{
if(r==0)
return true;
if(memo[l][r]!=-1)
return memo[l][r]==1;
memo[l][r]=0;
for(int i=r-1;i>=0;i--)
{
if(helper(s.substring(i,r),wordDict)&&breakWord(s,wordDict,l,i))
{
memo[l][r]=1;
break;
}
}
return memo[l][r]==1;
}
public boolean helper(String s,List<String> wordDict)
{
for(String str:wordDict)
{
if(str.equals(s))
return true;
}
return false;
}
}
//动态规划
class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
int n=s.length();
boolean[] dp=new boolean[n+1];
dp[0]=false;
for(int i=1;i<=n;i++)
{
if(helper(s.substring(0,i),wordDict))
dp[i]=true;
else
{
dp[i]=false;
for(int j=i-1;j>=0;j--)
{
if(helper(s.substring(j,i),wordDict)&&dp[j])
{
dp[i]=true;
break;
}
}
}
}
return dp[n];
}
public boolean helper(String s,List<String> wordDict)
{
for(String str:wordDict)
{
if(str.equals(s))
return true;
}
return false;
}
}
从递归到memo到动态规划的更多相关文章
- Leetcode 70. Climbing Stairs 爬楼梯 (递归,记忆化,动态规划)
题目描述 要爬N阶楼梯,每次你可以走一阶或者两阶,问到N阶有多少种走法 测试样例 Input: 2 Output: 2 Explanation: 到第二阶有2种走法 1. 1 步 + 1 步 2. 2 ...
- leetcode动态规划笔记二
动态规划 题目分类 一维dp 矩阵型DP Unique Paths II : 矩阵型DP,求所有方法总数 Minimum Path Sum:矩阵型,求最大最小值 Triangle : 矩阵型,求最大最 ...
- leetcode动态规划笔记一---一维DP
动态规划 刷题方法 告别动态规划,连刷 40 道题,我总结了这些套路,看不懂你打我 - 知乎 北美算法面试的题目分类,按类型和规律刷题 题目分类 一维dp House Robber : 求最大最小值 ...
- 算法导论——lec 11 动态规划及应用
和分治法一样,动态规划也是通过组合子问题的解而解决整个问题的.分治法是指将问题划分为一个一个独立的子问题,递归地求解各个子问题然后合并子问题的解而得到原问题的解.与此不同,动态规划适用于子问题不是相互 ...
- 剑指Offer——动态规划算法
剑指Offer--动态规划算法 什么是动态规划? 和分治法一样,动态规划(dynamic programming)是通过组合子问题而解决整个问题的解. 分治法是将问题划分成一些独立的子问题,递归地求解 ...
- 动态规划----最长公共子序列(LCS)问题
题目: 求解两个字符串的最长公共子序列.如 AB34C 和 A1BC2 则最长公共子序列为 ABC. 思路分析:可以用dfs深搜,这里使用到了前面没有见到过的双重循环递归.也可以使用动态规划,在建 ...
- 递归&分治&贪心
递归 Recursion:通过函数体来进行的循环. 思路简单但效率低(建立函数的副本,消耗大量时间和内存).能用迭代就不用递归.递推公式+递推终止条件. 计算n阶乘,递归实现 def Factoria ...
- 6专题总结-动态规划dynamic programming
专题6--动态规划 1.动态规划基础知识 什么情况下可能是动态规划?满足下面三个条件之一:1. Maximum/Minimum -- 最大最小,最长,最短:写程序一般有max/min.2. Yes/N ...
- 终拿字节Offer...动态规划复盘...
大家好!我是 Johngo 呀! 和大家一起刷题不快不慢,没想到已经进行到了第二阶段,「动态规划」这部分题目很难,而且很不容易理解,目前我的题目做了一半,凭着之前对于「动态规划」的理解和最近做的题目做 ...
随机推荐
- Flutter - 自定义Dialog弹窗
------------恢复内容开始------------ Flutter - 自定义Dialog弹窗 应用场景:app系统版本升级弹窗,系统退出登录弹窗,首页广告弹窗,消息中心弹窗,删除文件弹窗等 ...
- JUC---09异步回调
一.相关概念 Java的过程是阻塞的,因此要实现异步回调,需要多线程的支持.要实现回调,B函数在不知道A函数具体实现的情况下能够调用A函数,这是一种多态,需要接口来实现.下面实现一个简单的Java回调 ...
- STM32入门系列-使用库函数点亮LED,LED初始化函数
要点亮LED,需要完成LED的驱动, 在工程模板上新建一个led.c和led.h文件,将其存放在led文件夹内.这两个文件需要我们自己编写. 通常xxx.c文件用于存放编写的驱动程序,xxx.h文件用 ...
- python网络编程(TCP/IP、发邮件)
TCP/IP 关注公众号"轻松学编程"了解更多. 计算机为了联网,就必须规定通讯协议,早期的计算机网络是由各个厂商规定的一些协议,他们之间互不兼容. 为了把全世界的电脑能够连接到一 ...
- 谈谈OKHttp的几道面试题
来吧,今天说说常用的网络框架OKHttp,也是现在Android所用的原生网络框架(Android 4.4开始,HttpURLConnection的底层实现被Google改成了OkHttp),GOGO ...
- python代码实现抢票助手
一. 代码使用Python+Splinter开发,Splinter是一个使用Python开发的开源Web应用测试工具,它可以帮你实现自动浏览站点和与其进行交互. 二. 安装好Python 3或2都可以 ...
- Java--关于cpu占用解决方案
关于cpu占用高的解决方案--java篇 通俗一点:找到进程,找到下面的线程,找到线程正在做的事,分析线程正在做的事. 一.查看cpu占用高的进程 top命令可以查看(假设%cpu已经属于很高了,我们 ...
- layui表单一
1. ***首先明确一点 表单的以来加载模块是 form.如果不加载form模块,select.checkbox.radio等将无法显示,并且无法使用form相关功能. 我们用layui官网的样本来做 ...
- git 的一些常用命令
1. git clone **(项目地址) 克隆一个git项目到本地,将git项目拉取到本地 2. git status 查看文件状态,列出当前目录没有被git管理,以及被修改过还未提交的文件 3. ...
- python_登陆验证文件上传下载_socket
client.py import os import sys import json import struct import socket # 下载--接收文件 def download(sk): ...