栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

找到所有从给定集合求和(允许重复)的方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

找到所有从给定集合求和(允许重复)的方法

如果您愿意花哨的linq技巧,可以发现此C#解决方案很有用。幸运的是,linq读起来有点像英语。想法是

k
从0开始逐步增加解决方案,直到达到正确的值为止。每个值都
k
基于先前的解决方案。不过,您必须注意的一件事是确保找到的新“方式”不会对其他方式进行重新排序。我仅通过对它们进行排序就认为它们是有效的来解决该问题。(这只是一个比较)

void Main() {    foreach (int[] way in GetSumWays(new[] {1, 2}, 6)) {        Console.WriteLine (string.Join(" ", way));    }}int[][] GetSumWays(int[] array, int k) {    int[][][] ways = new int[k + 1][][];    ways[0] = new[] { new int[0] };    for (int i = 1; i <= k; i++) {        ways[i] = ( from val in array where i - val >= 0 from subway in ways[i - val] where subway.Length == 0 || subway[0] >= val select Enumerable.Repeat(val, 1)     .Concat(subway)     .ToArray()        ).ToArray();    }    return ways[k];}

输出:

1 1 1 1 1 11 1 1 1 21 1 2 22 2 2

它使用动态编程方法,并且应该比幼稚的递归方法更快。我认为。我知道它很快就可以算出在几毫秒内突破一美元的方法数量。(242)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/380973.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号