【发布时间】:2019-10-19 06:40:59
【问题描述】:
在这里,我试图形成一个排列,其中包含成对的数字,每对 m 由 m 元素分隔。例如:
- 对于 [0,2],配对排列为 [2,0, 0,2],因此 m=2,因此数字 2 由 2 个元素分隔。
- 对于 [0,1] = 没有有效的安排
我仍然无法找出排列的模式或算法,因为我需要找到直到 [0,1,2,3,4,5,6,7,8] 的排列。但是,此列表的有效安排是 [3,7,8,2,3,1,2,1,6,7,5,8,4,0,0,6,5,4] 手动进行。
在下面的代码中,我只能通过首先获取列表中最大的数字来重新排列列表中的数字。我想知道如何根据对的数量来分离对(例如,如果对是 2,则分离数是 2)
如何对数字列表进行分隔和模式?
package main
import "fmt"
func MagicPairs(list []int) {
//length := len(list) * 2
magicPair := []int{}
magicPair = append(list, list...)
for i := 0; i <len(magicPair); i++{
if len(magicPair) == 0 {
//do nothing
}else{
m := max(list)
for p, x := range magicPair{
if magicPair[len(magicPair)-1] == m {
magicPair = append([]int{m}, (magicPair)[:len(magicPair)-1]...)
fmt.Println(magicPair)
return
}
if x == m{
magicPair = append([]int{m}, append((magicPair)[:p], (magicPair)[p+1:]...)...)
}
previousPair := magicPair[x]
if x == previousPair{
}
}
}
}
fmt.Println("1", magicPair)
}
func max(list[] int) int{
max := list[0]
for _, value := range list{
if value > max {
max = value
}
}
return max
}
func main(){
list := [] int {0,1,2,3,4,5,6,7,8}
MagicPairs(list)
}
【问题讨论】:
标签: algorithm go pattern-matching