关于螺旋矩阵的打印问题

题目是:

打印N*N螺旋矩阵,如N=5时,

打印以下字符串结果:
1    2   3   4  5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

以前都是模拟打印的,前几天网上又有人问起,就试着推了推:

大概思路是这样子的,取得每一层的左上角和右下角的两个位置,取得前一层的最大值(其实就是本层的右上角数据-1),记做addr,

计算本层的每个数据离左上角数据的差距,左上角的数据到自身的差距记为1,记做len.

经过计算可得出以下结论:

当i<=j时,a[i][j]=addr+len;

addr==4*(n-minp+1)*(minp-1)

len=i+j-2minp+1

a[i][j]=addr+len=4*(n-minp+1)*(minp-1)+(i+j-2minp+1);

当i>j时,a[i][j]=addr+len;

addr==4*(n-minp+1)*(minp-1)

len=2(maxp-minp)+2maxp-(i+j)+1=4maxp-2minp-i-j+1;

a[i][j]=addr+len=4*(n-minp+1)*(minp-1)+(4maxp-2minp-i-j+1);

关于minp和maxp:

当i+j<=n+1时,

minp=min(i,j);        maxp=n+1-min(i,j)

当i+j>n+1时,

minp=n+1-max(i,j);            maxp=max(i,j)

(也可以将i+j>n+1转化到i+j<=n+1上求解:

minp=min(n+1-i),(n+1-j)=n+1+min(-i,-j)=n+1-max(i,j);)

addr其实就是一个等差数列的和:

addr=4(n-1)+4(n-3)+4(n-5)+……+4(n-(2min-3))

=4((n-1)+(n-3)+……+(n-(2min-3)))

=4*((n-1+(n-(2min-3)))*(min-1))/2

=2*(2n-1-2min+3)*(min-1)

=2*(2n-2min+2)(min-1)

=4*(n-min+1)*(min-1)

END.

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值