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

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

我如何循環(huán)遍歷給定范圍內(nèi)的 N 個(gè)數(shù)字的排列,最好不使用遞歸?

我如何循環(huán)遍歷給定范圍內(nèi)的 N 個(gè)數(shù)字的排列,最好不使用遞歸?

慕桂英4014372 2023-07-28 09:53:25
我有N 個(gè)數(shù)字和一個(gè)范圍,我必須在該范圍內(nèi)對(duì)數(shù)字進(jìn)行排列。例如,如果我有 3 個(gè)數(shù)字,范圍為 1-2,我會(huì)循環(huán)1 1 1、1 1 2、1 2 1等。最好但不是必須的,我怎樣才能在不遞歸的情況下做到這一點(diǎn)?對(duì)于一般想法,嵌套循環(huán)不允許任意數(shù)量的數(shù)字,并且由于深度太高,遞歸是不可取的(超過(guò) 1-10 的 3 個(gè)數(shù)字將超過(guò) 1,000 次調(diào)用使用這些數(shù)字的代碼部分)
查看完整描述

1 回答

?
函數(shù)式編程

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

實(shí)現(xiàn)此目的的一種方法是每個(gè)排列循環(huán)一次迭代,并使用循環(huán)變量來(lái)計(jì)算排列所產(chǎn)生的值。考慮到范圍的大小可以用作模參數(shù)來(lái)“截?cái)唷睂⒊蔀榻Y(jié)果中的值(數(shù)字)之一的值(數(shù)字)。然后,如果將循環(huán)變量(好吧,它的副本)除以范圍大小,則重復(fù)上述操作以提取另一個(gè)值,...等。


顯然,只有當(dāng)結(jié)果數(shù)量不超過(guò)類型的容量int或用于循環(huán)變量的任何類型的容量時(shí),這才有效。


所以看起來(lái)是這樣的:


int [][] getResults(int numPositions, int low, int high) {

    int numValues = high - low + 1;

    int numResults = (int) Math.pow(numValues, numPositions);

    int results[][] = new int [numResults][numPositions];

    for (int i = 0; i < numResults; i++) {

        int result[] = results[i];

        int n = i;

        for (int j = numPositions-1; j >= 0; j--) {

            result[j] = low + n % numValues;

            n /= numValues;

        }

    }

    return results; 

}

您在問(wèn)題中給出的示例將通過(guò)以下調(diào)用生成:


int results[][] = getResults(3, 1, 2);

那么結(jié)果是:


1 1 1

1 1 2

1 2 1

1 2 2

2 1 1

2 1 2

2 2 1

2 2 2


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

添加回答

舉報(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)