记录一下自己对蛇形矩阵的实现

腾讯校招笔试模拟题遇到蛇形矩阵实现的编程题
记录一下自己的实现代码

 * 根据给出的 N 输出一个 N*N 的蛇形矩阵
 * 行分为 1.第一行 2.存在自左向右自然递增的行 3.存在自右向左自然递增的行 三种情况
 * 列分为 1.左侧相比上一行同位减一的列 2.右侧相比上一行同位加一的列 3.中间自然递增递减的列 三种情况
 * 判断出目前的位置属于哪种情况就知道怎么去计算当前位置的数字了
 * @param  integer $n N
 */ 
public function sxjz( $n )
{
    // 存放矩阵数据的变量
    $result = array();
    // 行 2 列 1 区域长度
    $leftWidth = -1;
    // 行 2 列 2 区域长度
    $rightWidth = 0;
    // 行 3 列 1、2 区域长度
    $paddingWidth = $n - 1;
    for ( $i = 0; $i < $n; $i++ )
    {
        for ( $j = 0; $j < $n; $j++ )
        {
            // 第一行直接赋值
            if ( $i === 0 )
                $result[$i][$j] = $j + 1;
            // 行 2 情况
            else if ( $i < ( $n%2 === 0 ? $n/2 : ($n+1)/2 ) )
            {
                $tempAutoAddLen = $n - $leftWidth - $rightWidth;
                $tempAutoAddStart = $leftWidth;
                // 行 2 列 1 情况
                if ( $j < $leftWidth )
                    $result[$i][$j] = $result[$i-1][$j] - 1;
                // 行 2 列 2 情况
                else if ( $j >= $leftWidth + $tempAutoAddLen )
                    $result[$i][$j] = $result[$i-1][$j] + 1;
                // 行 2 列 3 情况
                else
                    $result[$i][$j] = $result[$i-1][$j] + 4*$tempAutoAddLen - 1;
            }
            // 行 3 情况
            else if ( $i >= ( $n%2 === 0 ? $n/2 : ($n+1)/2 ) )
            {
                $tempAutoAddLen = $n - 2*$paddingWidth;
                // 行 3 列 1 情况
                if ( $j < $paddingWidth )
                    $result[$i][$j] = $result[$i-1][$j] - 1;
                // 行 3 列 2 情况
                else if ( $j >= $paddingWidth + $tempAutoAddLen )
                    $result[$i][$j] = $result[$i-1][$j] + 1;
                // 行 3 列 3 情况
                else
                {
                    if ( $n - $i - 1 === 0 )
                        $result[$i][$j] = 3*$tempAutoAddLen + $paddingWidth - $j - 2;
                    else
                        $result[$i][$j] = $result[$n-$i-1][$n-$i-2] + 3*$tempAutoAddLen + $paddingWidth - $j - 2;
                }
            }
            echo $result[$i][$j] . "\t";
        }
        $leftWidth++;
        $rightWidth++;
        $paddingWidth--;
        echo '<br>';
    }
}`
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容