博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
回转顺序打印矩阵的改进算法
阅读量:2234 次
发布时间:2019-05-09

本文共 814 字,大约阅读时间需要 2 分钟。

原题目见:

如果使用二维数组,空间复杂度为O(N^2),事实上本题可以计算A[i][j]的通项公式,这样可以不用额外的矩阵存储空间,空间复杂度降为O(1)。

思想是考虑从左上角开始的i*i子矩阵,只要在子矩阵扩张的外围补充(i*i+1)~(i+1)*(i+1)的序列即可。又可以看做是(i+1)^2加上一个修正值(负数)序列。而对角线上的修正值正好是层数的相反数,以此左右上下增减即可。这个技巧主要是利用了对称。

代码如下:

#include 
#include
using namespace std;int Layer(int i, int j){ return max(i, j);}int Fix(int i, int j, int n){ int flag; if(n % 2 == 0) flag = -1; else flag = 1; // if(i == j) // return -n; // else return -n + flag * (i - j);}int main(){ int N; while(scanf("%d", &N) != EOF) { for(int i = 0; i < N; i++) { for(int j = 0; j < N; j++) { int n = Layer(i, j); printf("%4d ", (n + 1) * (n + 1) + Fix(i, j, n)); } putchar('\n'); } } return 0;}

转载地址:http://zanbb.baihongyu.com/

你可能感兴趣的文章
PHP项目用xhprof性能分析(安装及应用实例)
查看>>
composer安装YII
查看>>
Sublime text3快捷键演示
查看>>
sublime text3 快捷键修改
查看>>
关于PHP几点建议
查看>>
硬盘的接口、协议
查看>>
VLAN与子网划分区别
查看>>
Cisco Packet Tracer教程
查看>>
02. 交换机的基本配置和管理
查看>>
03. 交换机的Telnet远程登陆配置
查看>>
微信小程序-调用-腾讯视频-解决方案
查看>>
phpStudy安装yaf扩展
查看>>
密码 加密 加盐 常用操作记录
查看>>
TP 分页后,调用指定页。
查看>>
Oracle数据库中的(+)连接
查看>>
java-oracle中几十个实用的PL/SQL
查看>>
PLSQL常用方法汇总
查看>>
几个基本的 Sql Plus 命令 和 例子
查看>>
PLSQL单行函数和组函数详解
查看>>
Oracle PL/SQL语言初级教程之异常处理
查看>>