回形打印二维数组,要求不在内存中开辟二维数组——腾讯二面

该题为腾讯mxg面试委员会二面试题,要求如下:
逐行打印n * n回型矩阵( 不可以在内存填好整个矩阵然后再打印)

n=3
1 2 3
8 9 4
7 6 5

n=4
1 2 3 4 
12 13 14 5 
11 16 15 6 
10 9 8 7 

 

不在内存中开辟二维数组,则应该寻找(i, j)与num的关系,达到O(1)计算(i, j)上应该填充的num

将二维数组看成一层一层的圈,如图。外层(红色)为第0圈,中间层(深蓝)为第1圈,内层(浅蓝)为第2层

以下均以n=6为例:

根据n的大小可计算(i, j)所处在第几个圈中,i_circle_index = Min(Min(i, j)-0, n-1-Max(i, j))

其实就是判断i, j中离0或n-1大小最小的那个就是当前圈,如(0, 3)->0,(1, 2)->1,(1, 5)->0,(2, 3)->2

 

根据n和(i, j)所处圈可计算当前圈中数字的个数i_circle_num = (n-1-(2*i_index))*4<=0?1:(n-1-(2*i_index))*4,这个比较好理解,就不做解释了

接下来就是求每个(i, j)所对应的值num了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值