固定长度且含固定数量1的二进制数的序号计算方法问询
固定长度且含固定数量1的二进制数的序号计算方法问询
嘿,我最近卡壳了,想找个公式或者算法来计算固定总位数、固定1的个数的二进制数在升序排列中的序号。
举个具体的例子:我现在看的是所有22位、恰好包含10个1的二进制数,它们按数值从小到大排序的话:
0000000000001111111111₂→ 第1个序号0000000000010111111111₂→ 第2个序号0000000000011011111111₂→ 第3个序号- ...
0000001011111001101100₂→ 某个中间序号- ...
1111111111000000000000₂→ 第646646个序号
我已经能用Java代码生成所有这类数,也知道总数是组合数C(22,10)=646646个。
现在的问题是:给定任意一个符合条件的二进制数,我该怎么计算它对应的序号n(1≤n≤646646)呢?
或者说,有没有现成的算法解决这个问题?我可能只是不知道这个问题的专有名称而已。
备注:内容来源于stack exchange,提问作者jmizv
相关产品推荐
相关产品推荐

