|
算法问题 用SQL写出当M*N时的螺旋矩阵算法 如下是一个4*4的矩阵:
1 12 11 10 2 13 16 9 3 14 15 8 4 5 6 7
按照上面矩阵的规律, 请用SQL写出当M*N时的矩阵算法
实现的sql和效果:
代码:-------------------------------------------------------------------------------- SQL> -- 逆时针的 SQL> select --i, 2 sum(decode(j, 1, rn)) as co11, 3 sum(decode(j, 2, rn)) as co12, 4 sum(decode(j, 3, rn)) as co13, 5 sum(decode(j, 4, rn)) as co14 6 from (select i, j, rank() over(order by tag) as rn 7 from (select i, 8 j, 9 -- 逆时针螺旋特征码 counter-clockwise 10 case least(j - 1, 4 - i, 4 - j, i - 1) 11 when j - 1 then 12 (j - 1) || ''''1'''' || i 13 when 4-i then 14 (4 - i) || ''''2'''' || j 15 when 4 - j then 16 (4 - j) || ''''3'''' || (4 - i) 17 when i - 1 then 18 (i - 1) || ''''4'''' || (4 - j) 19 end as tag 20 from (select level as i from dual connect by level <= 4) a, 21 (select level as j from dual connect by level <= 4) b)) 22 group by i 23 /
CO11 CO12 CO13 CO14 ---------- ---------- ---------- ---------- 1 12 11 10 2 13 16 9 3 14 15 8 4 5 6 7
SQL> -- 顺时针的 SQL> select --i, 2 sum(decode(j, 1, rn)) as co11, 3 sum(decode(j, 2, rn)) as co12, 4 sum(decode(j, 3, rn)) as co13, 5 sum(decode(j, 4, rn)) as co14 6 from (select i, j, rank() over(order by tag) as rn 7 from (select i, 8 j, 9 -- 顺时针螺旋特征码 clockwise 10 case least(i - 1, 4 - j, 4 - i, j - 1) 11 when i - 1 then 12 (i - 1) || ''''1'''' || j 13 when 4 - j then 14 (4 - j) || ''''2'''' || i 15 when 4 - i then 16 (4 - i) || ''''3'''' || (4 - j) 17 when j - 1 then 18 (j - 1) || ''''4'''' || (4 - i) 19 end as tag 20   [1] [2] [3] [4] [5] [6] 下一页 [电脑技术]使用?和*两个通配符迅速批量(搜索)查找文件 [聊天工具]快速又高效 用Email免费发送网络传真__天极Yesky [常用软件]网管工具 用OH协助服务器进行安全监控 [常用软件]留住精彩 用“数码故事”制作DVD光碟 [常用软件]小块头有大智慧 用Nero轻松设计个性化光盘 [常用软件]技高一筹 用Winamp播放影碟 [VB.NET程序]用 VB 实现表单的自动提交 [VB.NET程序]用 VB 打开任意盘(硬盘/U盘/光盘)的文件. [VB.NET程序]用 VB 创建MS OFFICE的 COM 加载项 [VB.NET程序]如 何 用 API 播 放 CD
|