使用PHP输出蛇形数组,总之是要生成如下类似的数组:
1 2 3 4 5 6 |
1 20 19 18 17 16 2 21 32 31 30 15 3 22 33 36 29 14 4 23 34 35 28 13 5 24 25 26 27 12 6 7 8 9 10 11 |
从一树小草的博客中看到的,是一道笔试题。
我要是去笔试的话也是妥妥的会被鄙视,时间短+有压力的情况下完全写不出来。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
<?php $snakeArray = snakeArray(5, 5); printXYarray($snakeArray); function snakeArray($width = 5, $height = 5) { $Top = 0; $Bottom = $height; $Left = 0; $Right = $width; $arrayXY = array(); $i = 1; $x = 0; $y = 0; $max = ($width + 1) * ($height + 1); while ($i <= $max) { for ($x = $Left, $y = $Top; $x <= $Right; ++$x) { $arrayXY[$x][$y] = $i; ++$i; } $Top = $Top + 1; for ($x = $Right, $y = $Top; $y <= $Bottom; ++$y) { $arrayXY[$x][$y] = $i; ++$i; } $Right = $Right - 1; for ($x = $Right, $y = $Bottom; $x >= $Left; --$x) { $arrayXY[$x][$y] = $i; ++$i; } $Bottom = $Bottom - 1; for ($x = $Left, $y = $Bottom; $y >= $Top; --$y) { $arrayXY[$x][$y] = $i; ++$i; } $Left = $Left + 1; } $arrayXY = reksortXYarray($arrayXY); return $arrayXY; } function reksortXYarray($arrayXY) { foreach ($arrayXY as &$arrayY) { ksort($arrayY); } ksort($arrayXY); return $arrayXY; } function printXYarray($arrayXY) { foreach ($arrayXY as $key1 => $value1) { foreach ($value1 as $key2 => $value2) { //echo "x:$key1,y:$key2,value:".$value2.'\t'; echo $value2."\t"; } echo "\n"; } } |
相应GitHub地址:https://github.com/catscarlet/function_in_common_use/blob/master/snakeArray.php
其他:
其实我这段代码与原文中的需求不相符的,原文的蛇是顺时针的,而我的代码生成的是逆时针的。
可以使用我的另一组代码来解决,不过我没有验证过。
4 comments
Skip to comment form ↓
一树小草
2016 年 5 月 20 日 在 下午 7:07 (UTC 8) Link to this comment
后来才发现Leetcode上有类似的题目:https://leetcode.com/problems/spiral-matrix/
(然而Leetcode并不支持PHP ㄟ( ▔, ▔ )ㄏ)
慕若曦
2016 年 5 月 26 日 在 下午 11:39 (UTC 8) Link to this comment
然而我这个渣滓是看不懂php的
rin
2016 年 5 月 31 日 在 下午 10:47 (UTC 8) Link to this comment
yo
JUSTYY 小赖子
2016 年 12 月 6 日 在 下午 6:27 (UTC 8) Link to this comment
我写过: https://helloacm.com/cc-coding-exercise-spiral-matrix-leetcode-online-judge-pixelgrid-walking-simulation/