题解 | #杨辉三角的变形#

杨辉三角的变形

http://www.nowcoder.com/practice/8ef655edf42d4e08b44be4d777edbf43

以上三角形的数阵,第一行只有一个数1,以下每行的每个数,是恰好是它上面的数,左上角数到右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。

求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3。数据范围: 。本题有多组输入数据。

输入描述:

输入一个int整数

输出描述:

输出返回的int值

示例
输入:4
           2
输出:3
          -1

方法一

思路分析

方法一的思路为暴力求解,直接构造数组求解杨辉三角的数组的元素,然后遍历最后一行求解第一个出现偶数的位置。根据题目要求第一行只有一个数1,以下每行的每个数,是恰好是它上面的数,左上角数到右上角的数,3个数之和(如果不存在某个数,认为该数就是0),因此构造$arr[n,2*n-1]$的二维数组。构造方法如下:
  • 初始化数组元素为0
  • 三角形三个顶点位置的元素均为1
  • 每行的每个数,是恰好是它上面的数,左上角数到右上角的数,3个数之和,如果这个数不存在即为0
按照上面的办法可以构造得到完整的杨辉三角数组。之后遍历数组的最后一行,找到第一个为偶数的元素位置,如果没有输出-1

核心代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int count=0;
    while(cin>>count)
    {
        if(count<=2) 
        {
            cout<<-1<<endl;
            continue;
        }
        vector<vector<int>>arr(count,vector<int>(2*count-1,0));
        arr[0][count-1]=1;//三角形三个顶点的元素为1
        arr[count-1][0]=1;
        arr[count-1][2*count-2]=1;
        for(int i=1;i<count;i++)
        {
            for(int j=1;j<2*count-2;j++)
                arr[i][j]=arr[i-1][j]+arr[i-1][j-1]+arr[i-1][j+1];//三个数之和
        }
        
        for(int i=0;i<2*count-1;i++)
        {
            if(arr[count-1][i]!=0 && (arr[count-1][i]%2==0))
           {
               cout<<i+1<<endl;
               break;
           }
        }
    }
}
复杂度分析
  • 时间复杂度:时间花费在数组的构造,时间复杂度为$O(n^2)$,之后需要在数组最后一行寻找第一个偶数的位置,时间复杂度为$O(n)$,总的时间复杂度为$O(n^2)$
  • 空间复杂度:需要构造额外的存储空间数组,空间复杂度为$O(n^2)$

方法二

思路分析

本题除了使用暴力法构造数组之外,也可以根据规律进行求解,可以看到第一行和第二行是没有偶数出现的,因此直接输出-1。之后的每一行中偶数元素的出现也是带有规律的。在分析的过程中在找偶数行的过程中需要多求解几行才可以找到规律。

图解


核心代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int count=0;
    while(cin>>count)
    {
        if(count<3) cout<<-1<<endl;
        else if(count%2!=0) cout<<2<<endl;//奇数行
        else if(count%2==0&&count%4==0) cout<<3<<endl;//偶数行分为两类
        else cout<<4<<endl;
    }
    return 0;
}

复杂度分析

  • 时间复杂度:时间复杂度为$O(1)$
  • 空间复杂度:空间复杂度为$O(1)$


全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
3209次浏览 43人参与
# HR最不可信的一句话是__ #
1021次浏览 32人参与
# MiniMax求职进展汇总 #
24901次浏览 321人参与
# 春招至今,你的战绩如何? #
14766次浏览 137人参与
# AI面会问哪些问题? #
893次浏览 22人参与
# 你的实习产出是真实的还是包装的? #
2722次浏览 52人参与
# 巨人网络春招 #
11484次浏览 224人参与
# 沪漂/北漂你觉得哪个更苦? #
1235次浏览 38人参与
# 你做过最难的笔试是哪家公司 #
1131次浏览 20人参与
# AI时代,哪个岗位还有“活路” #
2684次浏览 49人参与
# XX请雇我工作 #
51147次浏览 171人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7966次浏览 43人参与
# 简历第一个项目做什么 #
32073次浏览 357人参与
# 简历中的项目经历要怎么写? #
310908次浏览 4257人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152832次浏览 889人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187556次浏览 1123人参与
# AI时代,哪些岗位最容易被淘汰 #
64539次浏览 864人参与
# 如果重来一次你还会读研吗 #
229974次浏览 2011人参与
# 投格力的你,拿到offer了吗? #
178254次浏览 891人参与
# 你怎么看待AI面试 #
180654次浏览 1296人参与
# 正在春招的你,也参与了去年秋招吗? #
364172次浏览 2641人参与
# 腾讯音乐求职进展汇总 #
160822次浏览 1114人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务