题解 | #杨辉三角的变形#
杨辉三角的变形
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机考#