从递归到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 呀! 和大家一起刷题不快不慢,没想到已经进行到了第二阶段,「动态规划」这部分题目很难,而且很不容易理解,目前我的题目做了一半,凭着之前对于「动态规划」的理解和最近做的题目做 ...
 
随机推荐
- Vue (学习第四部  前端项目搭建流程 )
			
目录 客户端项目搭建 创建项目目录 初始化项目 安装路由 Vue-router 下载安装路由组件 配置路由 初始化路由对象 注册路由信息 在视图函数中显示路由对应的内容 路由对象提供的操作 页面跳转 ...
 - Mac下使用GitHub+Hexo搭建个人博客
			
首发链接 开始之前需要在电脑上安装好Git和node.js,Mac上可以使用Homebrew命令行工具来安装Git和node.js 安装Homebrew 在命令行工具输入以下命令,如果已经安装过Hom ...
 - Pyqy5 让窗口居中
			
# QDesktopWidget import sys from PyQt5.QtWidgets import QDesktopWidget,QMainWindow,QApplication from ...
 - 从零造就JVM大牛(一)
			
引言 从事java的小伙伴大家好,如果你是一名从事java行业的程序员,无论你是小白还是工作多年的老司机,我相信这篇文章一定会给你带来 不同程度的收货不敢说你看完我的文章从此精通jvm打遍天下无对手, ...
 - origin添加两个Y轴
			
1. 选中X和两个Y 2. 点击Double Y 3. 关掉gap to Symbol,否则Line+Symbol这种显示方式可能显示不出线条 
 - JDK---00Linux上编译openjdk8
			
Centos 7 编译自定义jdk8 1. 安装所需的依赖 yum install alsa-lib-devel cups-devel libX* gcc gcc-c++ freetype-devel ...
 - 在阿里云Ubuntu 14.04.5 LTS下安装nethogs0.8.5
			
由于默认安装的nethogs不能使用,提示:Creating socket failed while establishing local IP - are you root? 搜索资料后检查当前版本 ...
 - STM32入门系列-GPIO工作模式及LED电路原理
			
GPIO工作模式 由于GPIO内部的结构关系,决定了GPIO可配置成以下几种模式. 输入模式 在输入模式时,施密特触发器打开,输出被禁止.可通过输入数据寄存器GPIOx_IDR读取I/O状态.输入模式 ...
 - Numpy入门(简单)
			
NumPy介绍 最近因为需要使用python做一个数据处理的项目,所以粗略的学习了一下numpy,在此分享一下自己学习中遇到的一些问题和一些基础的名词. 什么是NumPy? python用于科学计算的 ...
 - Hash 算法与 Manacher 算法
			
目录 前言 简单介绍 简述 Hash 冲突 离散化 基本结构 普通 Hash 简述 例题 字符串 Hash 简单介绍 核心思想 基本运算 二维字符串 Hash 例题 兔子与兔子 回文子串的最大长度 后 ...