arrays - 如何将 2D 数组中的值与 GoLang 中的 1D 数组中的值进行比较?
问题描述
我需要比较一维数组和二维数组的值,并使用 Go 返回具有相似值的结果数组:
func absolutePermutation(n int32, k int32) []int32 {
var position []int32
var i, j int32
var result []int32
for i = 1; i <= n; i++ {
position[i-1] = i
}
x := getPermutations(position)
resVal := permNum(n)
fmt.Println(x)
for i = 0; i < resVal; i++ {
for j = 0; j < 4; j++ {
fmt.Println(x[i][j])
**if int32(math.Abs(float64(position[(j*resVal)+i])-float64(x[i][j]))) == k** {
result[i] = x[i][j]
} else {
continue
}
}
}
return result
}
func getPermutations(elements []int32) [][]int32 {
permutations := [][]int32{}
if len(elements) == 1 {
permutations = [][]int32{elements}
return permutations
}
for i := range elements {
el := make([]int32, len(elements))
copy(el, elements)
for _, perm := range getPermutations(append(el[0:i], el[i+1:]...)) {
permutations = append(permutations, append([]int32{elements[i]}, perm...))
}
}
return permutations
}
func permNum (n int32) int32 {
if n == 0 {
return 1
}
return n * permNum(n-1)
}
我尝试创建位置(此处将一维数组转换为二维数组。)但它没有意义。作为 GoLang 的新手,我在这段代码中遇到了这个错误,该代码是为了获取给定数字的排列而编写的:
运行时错误:索引超出范围 [0],长度为 0
解决方案
我在一定程度上解决了。你可以参考这个。
func absolutePermutation(n int32, k int32) []int32 {
var buffer [1024 * 1024]int32
position := buffer[0:n]
result := make([]int32, n)
var i, j int32
for i = 1; i <= n; i++ {
position[i-1] = i
}
x := getPermutations(position)
for i = 0; i < permNum(n); i++ {
for j = 0; j < n; j++ {
if int32(math.Abs(float64(position[j])-float64(x[i][j]))) == k {
result[j] = x[i][j]
if j==n-1{
return result
}
}else{
break
}
}
}
result = nil
return result
}
推荐阅读
- asp.net - 带有按钮的私有字符串的 ViewState
- python - 及时转移温度信号没有影响
- angular - Angular 6:Http 失败响应(Microsoft Edge)
- visual-studio - 怎么在msi里面运行exe?
- ios - UITableView 内部的 FSCalendar
- php - 当我被包含在所有带有php include的页面中时如何使用noindex?
- javascript - 我可以只将 onClick 函数连接到 Redux 商店,而不是连接按钮组件吗?
- vue.js - Vue.js 从字面上呈现大括号内的代码 - 显示大括号而不是结果
- android - 布局项目调整问题
- reactjs - 如何在反应中创建公共可访问文件夹?