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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

以精確數(shù)量獲取項目的算法

以精確數(shù)量獲取項目的算法

catspeake 2022-12-24 09:46:23
我已經(jīng)在兩款游戲中發(fā)現(xiàn)了這種算法/功能,但我一直想知道它背后的邏輯是什么。基本上,有一個項目列表,每個項目都有一個 id。例如:item_1 的 ID:1item_2 的 ID:2item_3 的 ID:4item_4 有 id:8item_5 的 ID:16等等每個新項目都會將 id 乘以 2。然后有一個數(shù)字,比方說 4,表示當(dāng)前項目是什么。這種情況是item_3,但棘手的部分是數(shù)字也可以一次選擇多個項目,例如 7 是 4 + 2 + 1 ( item_3, item_2, item_1) 或 17 是 16 + 1 ( item_5, item_1)。如果您有一個長列表并且對于多個選擇仍然非常準(zhǔn)確,它可以像 16384 一樣非常高。我該如何解決這個問題?
查看完整描述

3 回答

?
12345678_0001

TA貢獻(xiàn)1802條經(jīng)驗 獲得超5個贊

您描述的算法基本上是輸出 1 在數(shù)字的二進制表示中的位置。


對于 7,它的二進制表示是111。有三個1:分別在左起第一、第二、第三個位置,所以是第1、2、3項。注意我們是從左邊數(shù)的。


另一個例子:


對于 10,它的二進制表示是1010。有兩個 1:在左起第二個和第四個位置,因此輸出將是第 2 項和第 4 項。


這是 C# 中的一個實現(xiàn)。


public static List<int> FindOnes(int number) {

    var list = new List<int>();

    var binaryString = Convert.ToString(number, 2);

    for (int i = 0 ; i < binaryString.Length ; i++) {

        if (binaryString[binaryString.Length - i - 1] == '1') {

            list.Add(i + 1);

        }

    }

    return list;

}


// usage:

FindOnes(7) // [1,2,3]


查看完整回答
反對 回復(fù) 2022-12-24
?
呼啦一陣風(fēng)

TA貢獻(xiàn)1802條經(jīng)驗 獲得超6個贊

不知道你正在談?wù)摰挠螒蚴侨绾螌崿F(xiàn)它的,但如果這是我,我會使用數(shù)字的二進制表達(dá)式中的位來實現(xiàn)它(java 中的示例代碼)。


public boolean isItemSelected(final int number, final int itemId) {

    return (number & (1 << (itemId - 1))) != 0;

}

這里的技巧是數(shù)字的二進制表示(從右到左)已經(jīng)表示是否需要 1、2、4、8、16 等,以便僅使用 2 的冪來生成數(shù)字。左移只是使一個數(shù)字(二進制)全為 0,除了“itemId - 1”中的 1。如果該位1在給定的number. 然后檢查結(jié)果是否簡單 0地將其轉(zhuǎn)換為boolean.


顯然,如果你想構(gòu)建所有匹配的“itemIds”的數(shù)組/列表,你可以將它與一些循環(huán)或其他任何東西結(jié)合起來。


查看完整回答
反對 回復(fù) 2022-12-24
?
白豬掌柜的

TA貢獻(xiàn)1893條經(jīng)驗 獲得超10個贊

在 Javascript 中,您可以獲取數(shù)字,將其轉(zhuǎn)換為二進制值,獲取位,將其反轉(zhuǎn)并獲取值(索引加一)或零以過濾真值。


var value = 13,

    items = [...value.toString(2)].reverse().map((v, i) => +v && (i + 1)).filter(Boolean);


console.log(items);


查看完整回答
反對 回復(fù) 2022-12-24
  • 3 回答
  • 0 關(guān)注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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