golang make 二维数组
时间: 2023-10-01 10:12:06 浏览: 107
在 Golang 中,可以使用 make 函数来创建二维数组。下面是一个示例代码:
```go
package main
import "fmt"
func main() {
// 创建一个 3x3 的二维数组
rows := 3
cols := 3
arr := make([][]int, rows)
for i := range arr {
arr[i] = make([]int, cols)
}
// 初始化二维数组的值
for i := 0; i < rows; i++ {
for j := 0; j < cols; j++ {
arr[i][j] = i*cols + j + 1
}
}
// 打印二维数组
for i := 0; i < rows; i++ {
fmt.Println(arr[i])
}
}
```
上述代码通过 make 函数创建了一个 3 行 3 列的二维数组。然后使用嵌套的 for 循环初始化了二维数组的值,并最后打印了数组的内容。
运行上述代码,输出结果为:
```
[1 2 3]
[4 5 6]
[7 8 9]
```
希望这个例子对你有帮助!如果还有其他问题,请随时提问。
相关问题
golang 背包算法
Go 语言中的背包问题(Knapsack Problem)通常是指动态规划算法的一个应用实例,它涉及到在给定容量限制下选择物品以获得最大的价值。在 Go 中解决背包问题,你需要定义一个二维数组或矩阵,其中每个元素 `(i, j)` 表示前 i 个物品中有价值 j 的物品可以选择。常见的解决方案包括:
1. 动态规划:通过填充值表 `dp[i][j]`,计算包含前 i 个物品且总重量不超过 j 时的最大价值。初始条件通常是 `dp[0][j] = 0` 和 `dp[i][0]` 等于不包含第 i 个物品的价值。
```go
func knapSack(W int, wt []int, val []int, n int) int {
dp := make([][]int, n+1)
for i := range dp {
dp[i] = make([]int, W+1)
}
for i := 1; i <= n; i++ {
for w := 1; w <= W; w++ {
if wt[i-1] <= w {
dp[i][w] = max(dp[i-1][w], dp[i-1][w-wt[i-1]] + val[i-1])
} else {
dp[i][w] = dp[i-1][w]
}
}
}
return dp[n][W]
}
// 定义辅助函数 max(a, b)
func max(a, b int) int {
if a > b {
return a
}
return b
}
```
2. 回溯法:这是一种递归解法,从最大值开始尝试添加物品,直到达到容量限制。
```go
func backtracking(W int, wt []int, val []int, n int, currWeight int, dp [][]bool) bool {
if currWeight == W || n == 0 {
dp[n][currWeight] = true
return dp[n][currWeight]
}
dp[n][currWeight] = dp[n-1][currWeight]
if wt[n-1] <= currWeight {
dp[n][currWeight] |= backtracking(W, wt, val, n-1, currWeight-wt[n-1], dp)
}
return dp[n][currWeight]
}
// 初始化dp数组
var dp [][2]int = make([][]bool, n+1)
```
用Golang给出完整代码
以下是使用Golang实现鸡蛋掉落问题的完整代码:
```go
package main
import (
"fmt"
"math"
)
func eggDrop(n, k int) int {
// 创建一个二维数组存储结果
dp := make([][]int, n+1)
for i := range dp {
dp[i] = make([]int, k+1)
}
// 初始化边界情况
for i := 1; i <= n; i++ {
dp[i][1] = 1
dp[i][0] = 0
}
for j := 1; j <= k; j++ {
dp[1][j] = j
}
// 填充DP数组
for i := 2; i <= n; i++ {
for j := 2; j <= k; j++ {
dp[i][j] = math.MaxInt32
for x := 1; x <= j; x++ {
res := 1 + max(dp[i-1][x-1], dp[i][j-x])
if res < dp[i][j] {
dp[i][j] = res
}
}
}
}
return dp[n][k]
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
func main() {
n, k := 2, 10
res := eggDrop(n, k)
fmt.Printf("在%d个鸡蛋和%d层楼的情况下,最少需要尝试%d次\n", n, k, res)
}
```
在这个实现中,我们使用了一个二维数组dp来存储结果。首先我们初始化边界情况,然后我们使用一个嵌套的循环来填充DP数组。最后返回dp[n][k],即为最终的结果。
阅读全文