英雄會-----楊輝三角-----楊輝三角的變形
阿新 • • 發佈:2019-01-29
楊輝三角
楊輝三角大家都熟悉,二項式n次方展開式的係數可排列成一個三角形的數表,成為楊輝三角。形似:
1
1 1
1 2 1
1 3 3 1
輸出楊輝三角的程式碼:
import java.util.*; public class Yanghui{ public static void main(String args[]){ Scanner scan = new Scanner(System.in); int n = Integer.parseInt(scan.next()); int mat[][] = new int[n][]; // int i,j = 0; for(i=0;i<n;i++){ mat[i] = new int[i+1]; mat[i][0] = 1; mat[i][i] = 1; for(j = 1;j < i; j++){ mat[i][j] = mat[i-1][j-1]+mat[i-1][j]; } } for(i = 0;i < mat.length;i++){ for(j = 0; j<n-i;j++){ System.out.print(" "); } for(j = 0;j<mat[i].length;j++){ System.out.print(mat[i][j]+" "); } System.out.println(); } } }
按照這個思路,就在龐果網做了一道“楊輝三角的變形"。
題目:
1
1 1 1
1 2 3 2 1
1 3 6 7 6 3 1
以上三角形的數陣,第一行只有一個數1, 以下每行的每個數,是恰好是它上面的數,左上的數和右上數等3個數之和(如果不存在某個數,認為該數就是0)。
求第n行第一個偶數出現的位置。如果沒有偶數,則輸出-1。例如輸入3,則輸出2,輸入4則輸出3。
輸入n(n <= 1000000000)
開始的思路就是:將所有的數字都儲存到二維陣列中,然後在陣列的最後一行開始尋找第一個偶數。
程式碼如下:
public class Test { public static int run(int n) { int result = -1; int mat[][] = new int[n][]; int i, j, k =0; for(i = 0;i < n;i++ ){ mat[i] = new int[2*(i+1)-1]; mat[i][0] = 1; for(j = 1; j< 2*(i+1)-1;j++){ //left part if(j<=i){ if(j-2<0){//針對第二列,第二列的元素沒有左上角 if(j < mat[i-1].length){ mat[i][j] = mat[i-1][j]+mat[i-1][j-1]; }else{//針對第二行 1 1 1 mat[i][j] = mat[i-1][j-1]; } }else{ mat[i][j] = mat[i-1][j]+mat[i-1][j-1]+mat[i-1][j-2]; } k = j; }else{ //right part mat[i][j] = mat[i][--k]; } } } //search for(j = 0; j < mat[n-1].length;j++){ if(mat[n-1][j]%2 == 0){ result = j+1; break; } } return result; } public static void main(String []args) { System.out.println(run(1)); } }
但是提交之後發現超時了,
無奈修改了半天,還是超時,突然看到題目上有一個上線【1000000000】,才明白過來這樣把每個數字都求出來必然會超時。
最後想了半天還是沒想起來好辦法。只好求助與強大的百度了。看到網友的答案之後才發下原來如此的簡單。
唉。思維一點都不活躍。只怪自己腦子沒有轉過來圈啊!!!謹記謹記!
具體答案參見下面幾篇博文。
http://blog.csdn.net/SunnyYoona/article/details/16917447
http://blog.csdn.net/ToYueXinShangWan/article/details/15021313
http://blog.csdn.net/xhu_eternalcc/article/details/14390617
http://blog.csdn.net/jenly121/article/details/14521287