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