当前位置: 首页 > 面试题库 >

进行编程:生成组合

云和硕
2023-03-14
问题内容

这是功课

我正在开发一个项目,其中很小的一部分(非常小,一旦我开始工作,这基本上是该项目其余部分的前提条件)就是使用Go例程生成一些组合。

因此,我拥有的代码是:

package bruteforce

// GenerateCombinations is an iterator function.  Given an alphabet and a
// length, it will generate every possible combination of the letters in
// alphabet of the specified length.
//
// It is meant to be consumed by using the range clause:
//
//  for combination := range GenerateCombinations(alphabet, length) {
//      process(combination)
//  }
//
func GenerateCombinations(alphabet string, length int) <-chan string {

GenerateCombinations(alphabet, length):
if length == 0:
    yield ""
else:
    for i := range alphabet{
        for j := range GenerateCombinations(alphabet, length-1){
            i + j
        }
    }

    return nil
}

我真的根本不明白这一点。如您所见,那里有一些讲师提供的伪代码,但是它的实现却使我不寒而栗。

示例I / O将如下所示:

如果字母为{0,1}并且密码为长度2,则它将需要生成{0,1,00,01,10,11}。

我感谢所有建议,但请注意,“初学者”一词并没有开始描述我的go能力。说“使用渠道”之类的事情对我完全没有帮助。解释是我的朋友……除了“使用渠道”外,我还没有走出我的教授的运气。


问题答案:

您的老师已经暗示您应该使用频道而不是返回大数组。通过这样解决,您将不必存储包含所有组合的大数据块,而只需为函数提供不同的迭代并一次处理它们即可。

我们可以看到您的老师提示,GenerateCombinations返回a chan string而不是a []string

func GenerateCombinations(alphabet string, length int) <-chan string

这也意味着该函数必须1)创建要返回的通道,以及2)启动将例程传递给该通道的goroutine。该函数如下所示:

func GenerateCombinations(alphabet string, length int) <-chan string {
    c := make(chan string)

    // Starting a separate goroutine that will create all the combinations,
    // feeding them to the channel c
    go func(c chan string) {
        defer close(c) // Once the iteration function is finished, we close the channel

        // This is where the iteration will take place
        // Your teacher's pseudo code uses recursion
        // which mean you might want to create a separate function
        // that can call itself.
    }(c)

    return c // Return the channel to the calling function
}

虽然我将实际迭代留给您,但每个循环都应导致您将组合字符串放入通道中。因为它不是缓冲通道,所以迭代函数将等待主函数读取该值,然后再继续处理下一个迭代。

包含主要功能的游乐场版本:http :
//play.golang.org/p/CBkSjpmQ0t

使用递归的完整的工作解决方案:http :
//play.golang.org/p/0bWDCibSUJ



 类似资料:
  • 问题内容: 我有一个Dropwizard应用程序,需要为配置列表中的每个配置生成十几个bean。健康检查,石英计划程序等。 像这样: 我有多个MyConfiguration实例,都需要这样的bean。现在,我必须复制并粘贴这些定义,并为每个新配置重命名它们。 我可以以某种方式遍历我的配置类并为每个配置类生成一组bean定义吗? 我可以使用子类解决方案或任何类型安全的方法,而无需每次添加新服务时都复

  • 问题内容: 在过去的两年中,我一直在编写Java,现在,我开始用python(另外)进行编写。 问题是,当我查看我的Python代码时,似乎有人试图将Java代码转换为python格式,但结果却很糟糕,因为- python不是Java。 关于如何摆脱“用Python编写Java”模式的任何技巧? 谢谢! 问题答案: 您可能会考虑将自己沉浸在Python范例中。最好的方法是首先了解他们的知识,然后通

  • 我在我的代码中包括boost,cpprest和openssl,但它给我的错误像follow在android studio使用ndk我给了所有路径的目录和添加到程序它构建成功,但当我运行它时,它给我以下错误 我的cmakelist.txt是 android{compileSdkVersion 28 defaultConfig{applicationId“com.example.dell.cppadd

  • 用 GroovySql 构建下一个报告应用程序 这个月,随着 Andrew Glover 向您演示如何用 GroovySql 构建简单的数据报告应用程序,您对 Groovy 的实用知识会更进一步。GroovySql 结合利用闭包(closure)和迭代器(iterator),把资源管理的负担转移到 Groovy 框架本身,从而简化了 Java 数据库连通性(Java Database Connec

  • 我正在尝试生成android apk用于反应原生。通过https://facebook.github.io/react-native/docs/signed-apk-android.html#content给出的文档 1)生成密钥库 2) 设置 gradle 变量 3)将签名配置添加到应用程序的 gradle 配置 # 4) 生成签名 apk 以通过 android studio 发布 (buil

  • 问题内容: 给定2种rgb颜色和一个矩形区域,我想在这些颜色之间生成基本的线性渐变。我已经进行了快速搜索,唯一能够找到的是此Blog条目,但示例代码似乎丢失了,或者至少是在发布此信息之时。任何帮助,算法,代码示例,等等。这将用Java编写,但是显示层已经处理完毕,我只需要弄清楚如何弄清楚要显示的内容。 问题答案: 您需要在第一和第二种颜色之间进行插值。通过为每个分量(R,G,B)计算相同的插值,可