美文网首页
记录一下自己对蛇形矩阵的实现

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

作者: iSakura | 来源:发表于2016-04-04 16:48 被阅读0次

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

 * 根据给出的 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>';
    }
}`

相关文章

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

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

  • 蛇形矩阵

    java实现“之“字型矩阵 思路: 分为左上角、右下角、中间三部分,其中左上角和右下角和为N*N + 1,中间一部...

  • 蛇形矩阵

    是道老题了。凭着印象写,代码技巧是:先判断,后移动。

  • 蛇形矩阵 c 语言实现

    【问题描述】 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 【样例输出】 抠脚的代码:

  • 1160 蛇形矩阵

    题目描述 Description 小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填...

  • 蛇形矩阵 输出

    有的时候零零碎碎的东西太多,总归是需要找个地方来记录一下。大神们有个Git、CSDN,我就先在这里水一下吧,就只当...

  • 算法:蛇形矩阵

    偶然看到蛇形矩阵的算法题,觉得比较有趣,想了想,解出来了,并且对算法有了一个新的感知,先看看题目吧,后面谈谈对算法...

  • Tip | 蛇形矩阵

    输入一个数字i,需要返回的内容如下: 输入一个数字i,输出结果的矩阵是i行i列的。矩阵从右上角开始,从1开始往下,...

  • codevs 1160 蛇形矩阵

    康复1。 2016/01/08 7:58:25稚嫩的自己的代码: 感觉不是自己写的。怎么这么复杂啊。不过思路值得借...

  • 【Java】小议蛇形矩阵

    描述: 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 输入正整数n(n不大于100)输出,输出一个n行...

网友评论

      本文标题:记录一下自己对蛇形矩阵的实现

      本文链接:https://www.haomeiwen.com/subject/gsaulttx.html