In Pascal's triangle, the value from from every row is the sum of the values that are above it in the previous row. If no value is available one is used. Using the Java notation n[k] = n-1[k-1] + n-1[k]. The first row contains the value one.
Pascal's triangle is generated using 2 for loops and starting at the top with the first element.
import java.util.Collections; import java.util.LinkedList; import java.util.List; public class InterviewPascalTriangle { protected List<List<Integer>> generatePascalTriangle(int nbRows){ // Input Validation if ( nbRows < 0 ) throw new IllegalArgumentException( "The number of rows cannot be negative." ); // The object to return List<List<Integer>> toReturn = new LinkedList<List<Integer>>(); // Save the previous row. List<Integer> previousRow = Collections.emptyList(); // Process all the rows for( int i = 0 ; i <= nbRows ; i++ ){ // Create the current row List<Integer> currentRow = new LinkedList<Integer>(); toReturn.add( currentRow ); // Define the previous value int previousValue = 0; // Loop on all the values for(int c : previousRow){ currentRow.add( c + previousValue ); // Set the current value as the previous one previousValue = c; } // Add the last value currentRow.add( 1 ); // Save the current row. previousRow = currentRow; } return toReturn; } public static void main(String[] argv) throws Exception { InterviewPascalTriangle t = new InterviewPascalTriangle(); List<List<Integer>> res = t.generatePascalTriangle(7); System.out.println( "Result:" ); String tmp = res.get( res.size() -1 ).toString(); int max = (int) tmp.length(); for(List<Integer> c : res ){ String toDisplay = c.toString(); int padding = ( max - toDisplay.length()) / 2 ; StringBuilder sb = new StringBuilder(); for(int i=0; i < padding; i++){ sb.append( " " ); } sb.append( toDisplay ); System.out.println( sb.toString() ); } } }
Result: [1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1] [1, 5, 10, 10, 5, 1] [1, 6, 15, 20, 15, 6, 1] [1, 7, 21, 35, 35, 21, 7, 1]
The rows of Pascal's triangle are numbered from 0 to n. The first row only contains the value 1.