当前位置: 首页 > 知识库问答 >
问题:

从给定的一组数字到给定的长度构造的所有可能的数字的计数

祁博雅
2023-03-14

我试图从表示数字的int数组生成所有可能的数字。

例如,我得到以下结果。

1
2
11
21
12
22

count =6.  

例如,arr=new int[]{1,2,3},我得到以下结果。

1 2 3 11 21 31 12 22 32 13 23 33 111 211 311 121 221 321 131 231 331 112 212 312 122 222 322 132 232 332 113 213 313 123 223 323 133 233 333

计数=39。

我不太确定这是否是我应该为更大尺寸的输入数组专门获取的正确数量的条目。

有什么我不知道的数学公式吗?我知道n!不适用于这种情况。

下面是我编写的用于计算所有可能组合的代码

class HelloWorld {
static void Main() {
    var output =  GenerateAllCombinations(new int[] {1,2,3});
    foreach(var o in output )
    {
     Console.WriteLine(o);
    }
     Console.WriteLine(output.Count);
}

public static HashSet<string> GenerateAllCombinations(int[]  nums){
    //convert int array to string array
    var strNums=nums.Select(x =>x.ToString()).ToArray();

    var cach = new HashSet<string>(strNums);       
    var output = new HashSet<string>(strNums);

       for(int u=1;u<strNums.Length;u++)
     {
            var temp = new HashSet<string>(); 
         for(int i=0;i<strNums.Length;i++)
         {
                 foreach(var h  in cach )
                 {
                     temp.Add(h+strNums[i]);
                 }
         }
         cach=new HashSet<string>(temp);
         output.UnionWith(temp);
       }
         
    return output;
 }
}

共有1个答案

韦衡
2023-03-14

对于不同的数字,

  1. 个位数计数=n
  2. 2位数字的计数=n^2
  3. 3位数字的计数=n^3
  4. n位数的计数=n^n

总不同的数字=nn^2n^3...n^n=n*((n^n)-1)/(n-1)(使用简单的几何级数求和。

编辑:根据@AlexeiLevenkov的建议,如果0包含在数字中,有两种情况:

  1. 如果序列评估作为字符串完成,则答案保持不变
  2. 如果序列评估以数字的形式完成,则答案变为n^n
 类似资料:
  • 问题内容: 从最小和最大长度值的给定数组中获取所有可能的字符串组合的最佳算法是什么? 注意:这增加了复杂性,因为值是可变的,与链接到的问题不同。 例如: 问题答案: 几乎是基本转换 此解决方案是出于以下观察的目的:如果不是为了在有效组合的高位位置重复数组索引0处的字符,则此问题将只是从十进制到新的基数的基数转换。从0到(base ^ length)-1的所有整数。所以, 困难在于,它会错过与一个或

  • 如果我有数字,从,其中数字在两者之间缺失,那么我如何计算所有可能的数字,可以从这些数字的加法中形成(2/3/4/5/6...)。 例如,假设我有数字,即缺少和。现在,我可以形成 这是我需要找出的,这是我无法使用给定数字组合形成的1中的第一个数字。一个简单的逻辑就可以了。谢谢!

  • 我正在尝试构造一个程序,该程序将获取一个int({1,2,3})数组和一个长度值,并计算该数组的所有可能组合。 例如: 这将输出: 但是当我尝试在 for 循环中调用可能的梳子时,我不断收到堆栈溢出错误 }

  • 给定一组整数(正数或负数),我怎样才能找到一个和给定值相加的数字序列? 示例:给定一个数字列表,我需要求和。我可以选择序列(数字可以重复使用)或。我正试图找到一种有效的方法来缩短序列的长度。 这就像(http://en.wikipedia.org/wiki/Subset_sum)但就我而言,数字可以重复使用。 这也有点像分区问题(找到所有可能的子集,求和到一个给定的数字),但在我的例子中有负值。

  • 问题内容: 给定一个长度 和a ,如何编写一些Java代码以产生长度为n的所有可能的字符串,其中包含集合中的字符? 对于上面的示例,结果应具有2 ^ 4 = 16个字符串,即: 这是我的代码段: 好像只是在做排列,而不是我想要的。……在此先谢谢您:) 问题答案: 以与计数相同的方式来考虑它。从技术上讲,您是从aaaa到bbbb进行“计数”,就像二进制一样。 没有看到您尝试过的内容,我不能为您提供更

  • 问题内容: 我正在为Android开发一个数学应用程序。在这些字段之一中,用户可以输入一个整数(无数字且大于0)。这个想法是获得所有可能的和,使之成为整数,而不加倍(在这种情况下为4 + 1 == 1 + 4)。唯一已知的是此int。 例如: 假设用户输入4,我希望该应用返回: 4 3 + 1 2 + 2 2 + 1 + 1 1 + 1 + 1 + 1 显然4 == 4,所以也应该加上。关于我应该