#arrays #go #int32 #absolute-value #type-2-dimension
#массивы #Вперед #int32 #абсолютное значение #тип-2-измерение
Вопрос:
Мне нужно сравнить значения 1D-массива и 2D-массива и вернуть результирующий массив, который имеет аналогичные значения, используя 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)
}
Я попытался создать позицию (1D-массив в 2D-массив здесь.), Но это не имело смысла.
Как новичок в GoLang, я получаю эту ошибку в этом коде, который написан для получения перестановки заданного числа:
ошибка времени выполнения: индекс выходит за пределы диапазона [0] с длиной 0
Ответ №1:
В какой-то степени я решил. вы можете обратиться к этому.
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
}