求任何一个正数的组合,组合的规则是这个数等于1或2的整数幂之和,请列出组合的情况。
比如:
11 = 1,2,8
26 = 2,8,16
31 = 1,2,4,8,16
96 = 64,32
96 = 64,32 -> 1100000 = 100000,1000000
List<int> GetCombines(int number)
{
List<int> combines = new List<int>();
string str = Convert.ToString(number, 2);
for (int i = 0; i <= str.Length - 1; i++)
{
if (str[i] == '0') continue;
string s = Math.Pow(10, str.Length - i - 1).ToString("F0");
combines.Add(Convert.ToInt32(s, 2));
}
}
List<int> GetMask(int number)
{
List<int> mask = new List<int>();
int baseElement = 1;
int sumOfElement = 0;
while (sumOfElement < number)
{
if ((baseElement & number) != 0)
{
sumOfElement += baseElement;
mask.Add(baseElement);
}
baseElement = baseElement * 2;
}
return mask;
}