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

杨辉三角的变形

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String line = reader.readLine();

        Integer num = Integer.valueOf(line);

//         // 1.先得到每一行具体需要设置值的长度(将前面的补0)
//         // 2.先将需要补零的位置补零
//         // 3.接着最后补零位置的地方进行计算

//         // 得到规律arr[i][j] = arr[i-1][j-1] + arr[i-1][j] + arr[i-1][j+1]
//         int[][] arr = new int[num][];
//         for (int i = 0; i < num; i++) {
//             // 得到当前行有多少数据需要展示(包括0)
//             // 当num=2时
//             // 第一行:展示2个,第二行:展示3个
//             // 当num=3时
//             // 第一行:展示3个,第二行:展示4个,第三行:展示5个
//             // 所以可知:length = num + i
//             int length = num + i;
//             // 设置数组长度
//             arr[i] = new int[length];

//             // 得到需要补0的个数
//             // 当num=2时
//             // 第一行:补1个零,第二行:补0个零
//             // 当num=3时
//             // 第一行:补2个零,第二行:补1个零,第三行:补0个零
//             // 所以可知:count = num - (i+1)
//             int count = num - (i + 1);

//             // 先把前面的位置补0
//             for (int k = 0; k < count; k++) {
//                 arr[i][k] = 0;
//             }

//             // 区分前两行和其他行
//             if (i >= 2) {
//                 // 由于之前补零的时候,前面的下标已经使用了。所以从count开始
//                 for (int j = count; j < length; j++) {
//                     // 避免下标越界,默认设置为0
//                     int val1 = 0;
//                     if (j - 1 >= 0) {
//                         val1 = arr[i - 1][j - 1];
//                     }

//                     int val2 = 0;
//                     if (j < arr[i - 1].length) {
//                         val2 = arr[i - 1][j];
//                     }

//                     int val3 = 0;
//                     if (j + 1 < arr[i - 1].length) {
//                         val3 = arr[i - 1][j + 1];
//                     }


//                     arr[i][j] = val1 + val2 + val3;
//                 }
//             } else {
//                 // 前两行都是1
//                 for (int j = count; j < length; j++) {
//                     arr[i][j] = 1;
//                 }
//             }

//         }

//         for (int i = 0; i < num; i++) {
//             for (int j = 0; j < arr[i].length; j++) {
//                 if (arr[i][j] == 0) {
//                     System.out.print("  ");
//                 } else {
//                     System.out.print(arr[i][j] + " ");
//                 }
//             }
//             System.out.println();
//         }

//         for (int j = 0; j < arr[num - 1].length; j++) {
//             if (arr[num - 1][j] != 0 && arr[num - 1][j] % 2 == 0) {
//                  System.out.println(j+1);
//                  return;
//             }
//         }

//         System.out.println(-1);


        if (num == 1 || num == 2) {
            System.out.println(-1);
        } else if (num % 4 == 3 || num % 4 == 1) {
            System.out.println(2);
        } else if (num % 4 == 0) {
            System.out.println(3);
        } else if (num % 4 == 2) {
            System.out.println(4);
        }else{
            System.out.println(-1);
        }
    }
}

说实话,这道题我觉得挺坑的。我的思路是先通过杨辉三角形的规律,把它先展示出来,然后去判断。但是再提交之后,发现n=1000的试试,堆溢出了。。。
后面看了其他同学的解题思路。我悟了。。。。 找规律   
不过我还是准备把这个记录下来,毕竟推出这个展示的规律都花了我将近一个多小时
#华为OD机考#
全部评论
俺也一样!md算法题最后结果找规律是正确答案,挺曹丹的
点赞 回复 分享
发布于 2023-12-30 17:53 北京

相关推荐

10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
头像
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务