当前位置: 首页 > news >正文

算法 - 蛇形矩阵-上三角

蛇形矩阵

  • 描述
  • 实现逻辑
  • 代码实现
    • 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() //换行}
}

总结

  • 要找到具体的规律,按照规律进行数学逻辑的实现,进而代码实现
http://www.dtcms.com/a/277092.html

相关文章:

  • 2.3 单链表的应用
  • 图像读取与模型保存--基于NWPU-RESISC45数据集的图像二分类实战
  • stm32f103c8t6移植freeRTOS内存不足报错问题的解决办法
  • 浏览器渲染原理与性能优化全解析
  • 快速傅里叶变换(FFT)中的振幅和相位
  • 【计算机网络架构】环型架构简介
  • 在 C# 中调用 Python 脚本:实现跨语言功能集成
  • ADB 调试日志全攻略:如何开启与关闭 `ADB_TRACE` 日志
  • CS课程项目设计1:交互友好的井字棋游戏
  • 详解Linux下多进程与多线程通信(二)
  • 【QT】使用QSS进行界面美化
  • 异或为什么叫异或
  • 【读书笔记】《Effective Modern C++》第3章 Moving to Modern C++
  • Datawhale AI夏令营——基于带货视频评论的用户洞察挑战赛
  • 【PTA数据结构 | C语言版】简单计算器
  • 17.使用DenseNet网络进行Fashion-Mnist分类
  • LabVIEW调用外部DLL
  • 深度学习图像分类数据集—七种树叶识别分类
  • 零基础 “入坑” Java--- 十、继承
  • ARC 03 从Github Action job 到 runner pod
  • PPO(近端策略优化)
  • 华为HarmonyOS 5.0深度解析:跨设备算力池技术白皮书(2025全场景智慧中枢)
  • 【C++】list及其模拟实现
  • C++--List
  • AI交互中的礼貌用语:“谢谢“的效用与代价分析
  • 【操作系统-Day 5】通往内核的唯一桥梁:系统调用 (System Call)
  • MVC 参考手册
  • C++值类别与移动语义
  • linux shell从入门到精通(一)——初识Shell程序
  • opencv中contours的使用