算法 - 蛇形矩阵-上三角
蛇形矩阵
- 描述
- 实现逻辑
- 代码实现
- python
- Go
- 总结
描述
- 你需要输出一个 n 行 n 列的上三角形蛇形矩阵。
实现逻辑
- 按照矩阵的蛇形轨迹遍历实现
- 按照数学规律,对数字list分组分割,每次遍历生成一行
代码实现
python
代码如下(示例):
#蛇形矩阵,数学规律,将 1 ~ number之间的数字分组分割
n = int(input())
number = int(n * (n+1) / 2)
def solveByRow(n):arr = []for i in range(n):start = int(i * (i+1) / 2)arr.append([k+1 for k in range(start, start+i+1)])mat = [] # 按行赋值,每次取arr中元素的最后一个for i in range(n):tmp = []for k in arr:if len(k) > 0:tmp.append(k.pop())mat.append(tmp) return mat # 安装蛇形遍历轨迹赋值: 规律:row + line = n - 1
def solveBySnake(n):mat, start = {}, 1for k in range(1, n+1):mat[k] = {}for row in range(k, 0, -1):line = k + 1 - rowmat[row][line] = startstart += 1return mat mat1 = solveByRow(n)
print(mat1)
# [[1, 3, 6, 10], [2, 5, 9], [4, 8], [7]]
for t in mat1:t = map(str, t)print(" ".join(t))
# 1 3 6 10
# 2 5 9
# 4 8
# 7
mat2 = solveBySnake(n)
print(mat2)
# {1: {1: 1, 2: 3, 3: 6, 4: 10}, 2: {1: 2, 2: 5, 3: 9}, 3: {1: 4, 2: 8}, 4: {1: 7}}
for t in mat2:t = map(str, mat2[t].values())print(" ".join(t))
# 1 3 6 10
# 2 5 9
# 4 8
# 7
Go
package main
import ("fmt"
)
func main() {var n int fmt.Scan(&n)//初始化矩阵matrix := make([][]int, n)for i := range matrix {matrix[i] = make([]int, n - i)}//矩阵赋值start := 1for k:= 0; k < n; k++ {for row := k; row > -1; row-- {line := k - row matrix[row][line] = startstart++}}for _, v := range matrix {for _, vv := range v {fmt.Printf("%d ", vv)}fmt.Println() //换行}
}
总结
- 要找到具体的规律,按照规律进行数学逻辑的实现,进而代码实现