国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【LeetCode: 劍指 Offer 60. n個骰子的點數(shù) | 數(shù)學+ 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃】

這篇具有很好參考價值的文章主要介紹了【LeetCode: 劍指 Offer 60. n個骰子的點數(shù) | 數(shù)學+ 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【LeetCode: 劍指 Offer 60. n個骰子的點數(shù) | 數(shù)學+ 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃】

??作者簡介:碩風和煒,CSDN-Java領域新星創(chuàng)作者??,保研|國家獎學金|高中學習JAVA|大學完善JAVA開發(fā)技術棧|面試刷題|面經(jīng)八股文|經(jīng)驗分享|好用的網(wǎng)站工具分享??????
??座右銘:人生如棋,我愿為卒,行動雖慢,可誰曾見我后退一步???????

【LeetCode: 劍指 Offer 60. n個骰子的點數(shù) | 數(shù)學+ 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃】

題目鏈接

劍指 Offer 60. n個骰子的點數(shù)

題目描述

把n個骰子扔在地上,所有骰子朝上一面的點數(shù)之和為s。輸入n,打印出s的所有可能的值出現(xiàn)的概率。

你需要用一個浮點數(shù)數(shù)組返回答案,其中第 i 個元素代表這 n 個骰子所能擲出的點數(shù)集合中第 i 小的那個的概率。

示例 1:

輸入: 1
輸出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]
示例 2:

輸入: 2
輸出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.13889,0.11111,0.08333,0.05556,0.02778]

限制:

1 <= n <= 11

求解思路&實現(xiàn)代碼&運行結果


暴力遞歸

求解思路
  1. 為了能夠讓同學們更好的理解這個過程,我特意將整個思考的過程以及作圖的過程都繪制在下面這張圖中,希望可以通過下面這張圖更好的幫助你理解整個過程,大家可以結合這張圖來理解整個題目的求解思路。

【LeetCode: 劍指 Offer 60. n個骰子的點數(shù) | 數(shù)學+ 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃】

實現(xiàn)代碼
class Solution {

    private int n;
    List<Double> list;
    public double[] dicesProbability(int n) {
        this.n=n;
        list=new ArrayList<>();
        int start=n,end=n*6;
        
        process(start,end,n);
        double[] ans=new double[list.size()];
        for(int i=0;i<list.size();i++){
            ans[i]=list.get(i);
        }
        return ans;
    }

    public void process(int start,int end,int cnt){
        for(int i=start;i<=end;i++){
            int count=dfs(i,cnt);
            list.add(1.0/Math.pow(6,n)*count);
        }
    }

    public int dfs(int target,int cnt){
        if(cnt==0) return target==0?1:0;
        int count=0;
        for(int i=1;i<=6;i++){
           count+=dfs(target-i,cnt-1); 
        }
        return count;
    }
}
運行結果

【LeetCode: 劍指 Offer 60. n個骰子的點數(shù) | 數(shù)學+ 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃】


記憶化搜索

求解思路
  1. 根據(jù)我們遞歸的分析,在遞歸的過程中會產(chǎn)生重復的子過程,所以我們想到了加一個緩存表,也就是我們的記憶化搜索。
實現(xiàn)代碼
class Solution {

    private int n;
    private List<Double> list;
    public double[] dicesProbability(int n) {
        this.n=n;
        list=new ArrayList<>();
        int start=n,end=n*6;
        process(start,end,n);
        double[] ans=new double[list.size()];
        for(int i=0;i<list.size();i++){
            ans[i]=list.get(i);
        }
        return ans;
    }

    public void process(int start,int end,int cnt){
        int[][] dp=new int[12*6][12];
        for(int i=0;i<dp.length;i++) Arrays.fill(dp[i],-1);
        for(int i=start;i<=end;i++){
            int count=dfs(i,cnt,dp);
            list.add(1.0/Math.pow(6,n)*count);
        }
    }

    public int dfs(int target,int cnt,int[][] dp){
        if(target<0) return 0;
        if(cnt==0) return dp[target][cnt]=target==0?1:0;
        if(dp[target][cnt]!=-1) return dp[target][cnt];
        int count=0;
        for(int i=1;i<=6;i++){
           count+=dfs(target-i,cnt-1,dp); 
        }
        return dp[target][cnt]=count;
    }
}
運行結果

【LeetCode: 劍指 Offer 60. n個骰子的點數(shù) | 數(shù)學+ 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃】


動態(tài)規(guī)劃

求解思路
  1. 接下來我們根據(jù)之前的遞歸思路以及記憶化緩存改寫動態(tài)規(guī)劃。
實現(xiàn)代碼
class Solution {

    private int n;
    private List<Double> list;
    public double[] dicesProbability(int n) {
        this.n=n;
        list=new ArrayList<>();
        int start=n,end=n*6;
        process(start,end,n);
        double[] ans=new double[list.size()];
        for(int i=0;i<list.size();i++){
            ans[i]=list.get(i);
        }
        return ans;
    }

    public void process(int start,int end,int cnt){
        int[][] dp=new int[12*6][12];
        dp[0][0]=1;
        for(int target=1;target<=end;target++){
            for(int k=1;k<=cnt;k++){
                int count=0;
                for(int i=1;i<=6;i++){
                    if(target-i>=0) count+=dp[target-i][k-1]; 
                }
                dp[target][k]=count;
            }
            if(target>=start){
                list.add(1.0/Math.pow(6,n)*dp[target][cnt]);
            }   
        }
    }
}
運行結果

【LeetCode: 劍指 Offer 60. n個骰子的點數(shù) | 數(shù)學+ 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃】


共勉

最后,我想送給大家一句一直激勵我的座右銘,希望可以與大家共勉!
【LeetCode: 劍指 Offer 60. n個骰子的點數(shù) | 數(shù)學+ 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃】

【LeetCode: 劍指 Offer 60. n個骰子的點數(shù) | 數(shù)學+ 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃】文章來源地址http://www.zghlxwxcb.cn/news/detail-418574.html

到了這里,關于【LeetCode: 劍指 Offer 60. n個骰子的點數(shù) | 數(shù)學+ 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【LeetCode: 劍指 Offer II 090. 環(huán)形房屋偷盜(打家竊舍) | 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃】

    【LeetCode: 劍指 Offer II 090. 環(huán)形房屋偷盜(打家竊舍) | 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃】

    ??作者簡介:碩風和煒,CSDN-Java領域新星創(chuàng)作者??,保研|國家獎學金|高中學習JAVA|大學完善JAVA開發(fā)技術棧|面試刷題|面經(jīng)八股文|經(jīng)驗分享|好用的網(wǎng)站工具分享?????? ??座右銘:人生如棋,我愿為卒,行動雖慢,可誰曾見我后退一步??????? 大家再看這道題目之前,

    2023年04月14日
    瀏覽(17)
  • 每天一道leetcode:劍指 Offer 64. 求1+2+…+n(中等&遞歸)

    每天一道leetcode:劍指 Offer 64. 求1+2+…+n(中等&遞歸)

    求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等及條件判斷語句(A?B:C)。 1 = n = 10000 使用遞歸,我們馬上的想法是: 或者: 但是題目要求不能出現(xiàn)if、A?B:C這樣的,所以,我們只能直接返回什么東西。返回什么?返回n。只不過n要進行自加

    2024年02月12日
    瀏覽(20)
  • 每天一道leetcode:劍指 Offer 34. 二叉樹中和為某一值的路徑(中等&圖論&深度優(yōu)先遍歷&遞歸)

    每天一道leetcode:劍指 Offer 34. 二叉樹中和為某一值的路徑(中等&圖論&深度優(yōu)先遍歷&遞歸)

    給你二叉樹的根節(jié)點 root 和一個整數(shù)目標和 targetSum ,找出所有 從根節(jié)點到葉子節(jié)點 路徑總和等于給定目標和的路徑。 葉子節(jié)點 是指沒有子節(jié)點的節(jié)點。 樹中節(jié)點總數(shù)在范圍 [0, 5000] 內(nèi) -1000 = Node.val = 1000 -1000 = targetSum = 1000 使用遞歸深度優(yōu)先遍歷,使用前序遍歷,在遍歷途

    2024年02月12日
    瀏覽(16)
  • 劍指 Offer 49. !!丑數(shù) (找數(shù)學規(guī)律)

    參考資料 注意到丑數(shù) 只包含 質(zhì)因子是2,3,5。所以,丑數(shù)必然是有這三個數(shù)若干次相乘得到。而丑數(shù)序列保持從小到大,所以當前的丑數(shù)必然是前面某個丑數(shù)乘2或者3或者5得到的。

    2024年02月15日
    瀏覽(20)
  • 【LeetCode】劍指 Offer(27)

    【LeetCode】劍指 Offer(27)

    目錄 題目:劍指 Offer 53 - I. 在排序數(shù)組中查找數(shù)字 I - 力扣(Leetcode) 題目的接口: 解題思路: 代碼: 過啦?。?! 寫在最后: 那么這道題呢, 如果只是作為一道題,或者說筆試題, 我們當然是二話不說直接暴力拿下, 來看代碼: 是的,就是這么簡單,三行代碼暴力拿下

    2023年04月13日
    瀏覽(22)
  • 【LeetCode】劍指 Offer(21)

    【LeetCode】劍指 Offer(21)

    目錄 題目:劍指 Offer 39. 數(shù)組中出現(xiàn)次數(shù)超過一半的數(shù)字 - 力扣(Leetcode) 題目的接口: 解題思路: 代碼: 過啦?。。?題目:劍指 Offer 40. 最小的k個數(shù) - 力扣(Leetcode) 題目的接口: 解題思路: 代碼: 過啦?。?! 寫在最后: 這道題,我的思路是直接排序, 然后返回中間

    2023年04月10日
    瀏覽(29)
  • 【LeetCode】劍指 Offer(28)

    【LeetCode】劍指 Offer(28)

    目錄 題目:劍指 Offer 54. 二叉搜索樹的第k大節(jié)點 - 力扣(Leetcode) 題目的接口: 解題思路: 代碼: 過啦?。。?題目:劍指 Offer 55 - I. 二叉樹的深度 - 力扣(Leetcode) 題目的接口: 解題思路: 代碼: 過啦?。?! 題目:劍指 Offer 55 - II. 平衡二叉樹 - 力扣(Leetcode) 題目的接

    2023年04月24日
    瀏覽(34)
  • 【LeetCode】劍指 Offer(25)

    【LeetCode】劍指 Offer(25)

    目錄 題目:劍指 Offer 49. 丑數(shù) - 力扣(Leetcode) 題目的接口: 解題思路: 代碼: 過啦!?。?寫在最后: 丑數(shù)這道題用到一點動態(tài)規(guī)劃的思想, 具體思路如下: 根據(jù)題意: 如果說第一個丑數(shù)是一,包含質(zhì)因子 2、3 和 5 的數(shù)稱作丑數(shù), 那么我們發(fā)現(xiàn),之后的丑數(shù): 都是前

    2023年04月09日
    瀏覽(33)
  • 【LeetCode】劍指 Offer(26)

    【LeetCode】劍指 Offer(26)

    目錄 題目:劍指 Offer 51. 數(shù)組中的逆序?qū)?- 力扣(Leetcode) 題目的接口: 解題思路: 代碼: 過啦?。?! 寫在最后: 這一道題,我的思路是用雙指針暴力求解, 但這個數(shù)組長度,O(N^2)的時間復雜度肯定是不可能把所有樣例跑完, 看了大佬的思路,用的是歸并排序,(如果不

    2023年04月11日
    瀏覽(20)
  • 【LeetCode】劍指 Offer <二刷>(6)

    【LeetCode】劍指 Offer <二刷>(6)

    目錄 題目:劍指 Offer 12. 矩陣中的路徑 - 力扣(LeetCode) 題目的接口: 解題思路: 代碼: 過啦?。?! 題目:劍指 Offer 13. 機器人的運動范圍 - 力扣(LeetCode) 題目的接口: 解題思路: 代碼: 過啦!?。?寫在最后: 這是一道經(jīng)典的搜索題,用和是深度優(yōu)先搜素,這個方法

    2024年02月09日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包