第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

求大家指點(diǎn)一下(不用使用循環(huán)和遞歸都做.一種即可.這個(gè)用遞歸更簡(jiǎn)單些)

求大家指點(diǎn)一下(不用使用循環(huán)和遞歸都做.一種即可.這個(gè)用遞歸更簡(jiǎn)單些)

胡子哥哥 2023-04-15 18:14:13
問(wèn)題:左“{”,右”}"括號(hào)各N個(gè),請(qǐng)打印出所有正確的組合,比如當(dāng)N=3,{}{}{},{}{{}},等為正確的組合。如果寫的代碼是recursive,能否用iterative再寫一個(gè);反之亦然。py實(shí)現(xiàn):def foo(output, open, close, pairs): if open == pairs and close == pairs: print output else: if open<pairs: foo(output+'(', open+1, close, pairs) if close<open: foo(output+')', open, close+1, pairs) foo('', 0, 0, 3)
查看完整描述

1 回答

?
Cats萌萌

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊

這個(gè)很容易就可以想到用回溯法來(lái)做。假設(shè)從左往右填括號(hào)。

狀態(tài)包括:
(1) 填到第幾個(gè):int i
(2) 在右邊最多還能填多少個(gè) "}":int left
(3) 還剩多少個(gè)"{"可以填:int a
(4) 還剩多少個(gè)"}"可以填:int b

具體策略:
(1) 如果已經(jīng)填完了,輸出,返回(回溯)
(2) 如果還有"{"可以填:填進(jìn)去,遞歸填下一個(gè)。
(3) 如果還可以填"}"并且還有"}"可以填:填進(jìn)去,遞歸填下一個(gè)。

實(shí)現(xiàn)的代碼附在后面。

至于轉(zhuǎn)化成迭代的方式,任何遞歸都可以通過(guò)引入棧的方式來(lái)轉(zhuǎn)化,只是寫起來(lái)比較痛苦,看起來(lái)也比較痛苦就是了。

#include <stdio.h>const int maxn = 50;char x[maxn * 2 + 1];void perm(int i, int left, int a, int b) {    if (a == 0 && b == 0) {        puts(x); 
        return; 
    }    if (a > 0) {
        x[i] = '{';        perm(i + 1, left + 1, a - 1, b);
    }    if (b > 0 && left > 0) {
        x[i] = '}';        perm(i + 1, left - 1, a, b - 1);
    }
}int main() {    int n = 4;
    x [n * 2] = 0;    perm(0, 0, n, n);    return 0;
}


查看完整回答
反對(duì) 回復(fù) 2023-04-19
  • 1 回答
  • 0 關(guān)注
  • 212 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)