国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

LeetCode 刷題 (九)算法入門--回溯

morgan / 2626人閱讀

摘要:用來(lái)存放每一個(gè)可能的結(jié)果最終結(jié)果深度優(yōu)先遍歷剪枝當(dāng)遍歷到底個(gè)數(shù)是,如果的元素個(gè)數(shù)剩余元素個(gè)數(shù)時(shí),就不滿足條件了中元素個(gè)數(shù)達(dá)到,表示深度優(yōu)先遍歷到達(dá)最深處了。

?77. 組合77. 組合77. 組合

給定兩個(gè)整數(shù)?n?和?k,返回范圍?[1, n]?中所有可能的?k?個(gè)數(shù)的組合。

你可以按?任何順序?返回答案。

思路:

如果解決一個(gè)問(wèn)題有多個(gè)步驟,每一個(gè)步驟有多種方法,題目又要我們找出所有的方法,可以使用回溯算法;
回溯算法是在一棵樹(shù)上的 深度優(yōu)先遍歷(因?yàn)橐宜械慕?,所以需要遍歷);

為什么說(shuō)是在一棵樹(shù)上的深度優(yōu)先遍歷呢?比如說(shuō),你現(xiàn)在要解決一個(gè)問(wèn)題,這個(gè)問(wèn)題被分為了若干的步驟,對(duì)于每一個(gè)步驟都有多個(gè)方法到下一個(gè)步驟。(聽(tīng)君一席話,就是一席話,嘿嘿嘿?。。?。就是說(shuō)我們么一個(gè)步驟的選擇都是可以返回來(lái)更換的。

就拿本題來(lái)說(shuō):

? ? ? ? 比如說(shuō)給了4和3這兩個(gè)數(shù)據(jù);我們要從1,2,3,4,這4個(gè)數(shù)里面取3個(gè)數(shù)。很容易分析出來(lái):當(dāng)我們第一個(gè)數(shù)取1的時(shí)候,第二個(gè)數(shù)可以去2,3,4,.........。一次推下去。我們會(huì)得到一棵一棵的樹(shù)。樣子就是這個(gè)樣子(這個(gè)不是我畫(huà)的,我去LeetCode的題解上找到哈哈哈哈!!)

?想明白這個(gè)過(guò)程,那我們的解題辦法就來(lái)了。對(duì)于[1? n]里面的每一個(gè)數(shù),在最后選擇的k個(gè)數(shù)里面的只有兩種狀態(tài),要么它在,要么它不在。所以我們只需要去遍歷這n個(gè)數(shù),然后用一個(gè)數(shù)組temp把放入最后結(jié)果的數(shù)記錄下來(lái)。由于我們是從小到大遍歷,所以當(dāng)我們把當(dāng)前元素在最后結(jié)果里面的記錄完以后,后面再記錄的結(jié)果就不會(huì)再包含當(dāng)前元素了。

class Solution {public:    //temp 用來(lái)存放每一個(gè)可能的結(jié)果    vector temp;    //最終結(jié)果    vector> ans;    //深度優(yōu)先遍歷    void dfs(int cur, int n, int k) {        // 剪枝:當(dāng)遍歷到底cur個(gè)數(shù)是,如果temp的元素個(gè)數(shù)s+剩余元素個(gè)數(shù)t> combine(int n, int k) {        dfs(1, n, k);        return ans;    }};

46. 全排列

思路:通過(guò)上一題,這一題理解起來(lái)就更方便了。全部排列順序,就是上面的那個(gè)圖,第二次先選擇了2以后還可以繼續(xù)選擇1;所以我們只需要把每次選取的元素交換到數(shù)組左邊,這樣就可以和上一題的流程一樣了,不過(guò)記住記住排列的時(shí)候,未選擇的元素都可以來(lái)占當(dāng)前cur的位置,由于我們將未選擇的元素都交換到cur的右邊,所以從cur遍歷一遍就可以了。就是這么簡(jiǎn)單,k默認(rèn)為n就可以了。

class Solution {public:    void dfs(vector>& res, vector& output, int cur, int len){        // 所有數(shù)都填完了        if (cur == len) {            res.emplace_back(output);            return;        }        //這里每一個(gè)數(shù)組右邊的數(shù)都可以當(dāng)做第cur個(gè)元素        for (int i = cur; i < len; ++i) {            // 動(dòng)態(tài)維護(hù)數(shù)組,將未選取的元素交換到數(shù)組右邊            swap(output[i], output[cur]);            // 繼續(xù)遞歸填下一個(gè)數(shù)            dfs(res, output, cur + 1, len);            // 撤銷交換操作            swap(output[i], output[cur]);        }    }    vector> permute(vector& nums) {        vector > res;        dfs(res, nums, 0, (int)nums.size());        return res;    }};



784. 字母大小寫(xiě)全排列

給定一個(gè)字符串S,通過(guò)將字符串S中的每個(gè)字母轉(zhuǎn)變大小寫(xiě),我們可以獲得一個(gè)新的字符串。返回所有可能得到的字符串集合。

思路: 注意理解題目要求,題目是說(shuō)每個(gè)子母可以進(jìn)行大小寫(xiě)變換,但是沒(méi)有說(shuō)可以改變位置哦。

class Solution {public:    void dfs(vector &res,int cur,string &s,int len){        //數(shù)字不變        while(cur= "0" && s[cur] <= "9")            cur++;        if(cur == len){            res.emplace_back(s);            return ;        }            //子母轉(zhuǎn)變大小寫(xiě)        if(s[cur]>="a"&&s[cur]<="z")            s[cur] = toupper(s[cur]);        else            s[cur] = tolower(s[cur]);        dfs(res,cur+1,s,len);        //子母不轉(zhuǎn)變大小寫(xiě)        if(s[cur]>="a"&&s[cur]<="z")            s[cur] = toupper(s[cur]);        else            s[cur] = tolower(s[cur]);        dfs(res,cur+1,s,len);    }    vector letterCasePermutation(string s) {        vector res;        int len = s.length();        dfs(res,0,s,len);        return res;    }};

蕪湖~~~~~~~~~

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/123336.html

相關(guān)文章

  • leetcode 100 斬!回顧

    摘要:斬從第題開(kāi)始,到現(xiàn)在也差不多快一年了,回顧紀(jì)念一下。當(dāng)時(shí)對(duì)回溯動(dòng)態(tài)規(guī)劃也都只是上課的時(shí)候?qū)W過(guò),也并不熟練。最經(jīng)典的例子就是斐波那契數(shù)列了,求第項(xiàng)數(shù)列的值。 leetcode 100 斬!從第 1 題開(kāi)始,到現(xiàn)在也差不多快一年了,回顧紀(jì)念一下。 showImg(https://segmentfault.com/img/bVbu461?w=661&h=191); 為什么開(kāi)始刷題? 從大一就...

    wyk1184 評(píng)論0 收藏0
  • 算法日積月累】0-寫(xiě)在前面的話

    摘要:現(xiàn)在發(fā)出來(lái)的版本,我重新使用了語(yǔ)言實(shí)現(xiàn)。其實(shí)我之前介紹的老師課程也大量參考和使用算法這本書(shū)上的思路和例題??催@本書(shū)主要是讓我覺(jué)得算法可以以比較輕松的方式入門。劍指這本書(shū)主要用于準(zhǔn)備算法面試,在網(wǎng)絡(luò)上備受好評(píng)。 我是一個(gè)半路出家的程序員,在我剛開(kāi)始從事編碼工作的頭幾年,我沒(méi)有接觸過(guò)算法和數(shù)據(jù)結(jié)構(gòu),覺(jué)得它們是只會(huì)在我找工作的時(shí)候用得到的知識(shí)。盡管有很多人跟我說(shuō)過(guò)算法和數(shù)據(jù)結(jié)構(gòu)無(wú)比重要,我也...

    flybywind 評(píng)論0 收藏0
  • 第7期 Datawhale 組隊(duì)學(xué)習(xí)計(jì)劃

    馬上就要開(kāi)始啦這次共組織15個(gè)組隊(duì)學(xué)習(xí) 涵蓋了AI領(lǐng)域從理論知識(shí)到動(dòng)手實(shí)踐的內(nèi)容 按照下面給出的最完備學(xué)習(xí)路線分類 難度系數(shù)分為低、中、高三檔 可以按照需要參加 - 學(xué)習(xí)路線 - showImg(https://segmentfault.com/img/remote/1460000019082128); showImg(https://segmentfault.com/img/remote/...

    dinfer 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<