1. 程式人生 > 其它 >#力扣 LeetCode119. 楊輝三角 II #在所有 Java 提交中擊敗了100.00%的使用者 @FDDLC

#力扣 LeetCode119. 楊輝三角 II #在所有 Java 提交中擊敗了100.00%的使用者 @FDDLC

題目描述:

https://leetcode-cn.com/problems/pascals-triangle-ii/

Java程式碼:

import java.util.LinkedList;
import java.util.List;

class Solution {
    public List<Integer> getRow(int rowIndex) {
        List<Integer> answer=new LinkedList<>();
        int[][] triangle=new int[rowIndex+1][rowIndex+1];
        for(int r=0;r<=rowIndex;r++){
            for(int c=0;c<=r;c++){
                if(c==0||c==r)triangle[r][c]=1;
                else triangle[r][c]=triangle[r-1][c-1]+triangle[r-1][c];
            }
        }
        for(int c=0;c<=rowIndex;c++)answer.add(triangle[rowIndex][c]);
        return answer;
    }
}

Java程式碼二:

import java.util.LinkedList;
import java.util.List;

class Solution {
    public List<Integer> getRow(int rowIndex) {
        List<Integer> answer=new LinkedList<>();
        int[][] triangle=new int[2][rowIndex+1];
        for(int r=0;r<=rowIndex;r++){
            for(int c=0;c<=r;c++){
                if(c==0||c==r)triangle[r%2][c]=1;
                else triangle[r%2][c]=triangle[(r+1)%2][c-1]+triangle[(r+1)%2][c]; //(r+1)%2、r%2永遠是一個0,一個1
            }
        }
        for(int c=0;c<=rowIndex;c++)answer.add(triangle[rowIndex%2][c]);
        return answer;
    }
}

Java程式碼三:

import java.util.AbstractList;
import java.util.List;

class Solution {
    public List<Integer> getRow(int rowIndex) {
        return new AbstractList<Integer>() {
            @Override
            public Integer get(int index) {
                int[][] triangle=new int[2][rowIndex+1];
                for(int r=0;r<=rowIndex;r++){
                    for(int c=0;c<=r;c++){
                        if(c==0||c==r)triangle[r%2][c]=1;
                        else triangle[r%2][c]=triangle[(r+1)%2][c-1]+triangle[(r+1)%2][c]; //(r+1)%2、r%2永遠是一個0,一個1
                    }
                }
                return triangle[rowIndex%2][index];
            }

            @Override
            public int size() {
                return rowIndex+1;
            }
        };
    }
}

Java程式碼四:

import java.util.Arrays;
import java.util.List;

class Solution {
    public List<Integer> getRow(int rowIndex) {
        Integer[] a=new Integer[rowIndex+1];
        for(int r=0;r<=rowIndex;r++){
            for(int c=r;c>=0;c--){ //注意:要從後往前,因為a[c]+=a[c-1]!
                if(c==0||c==r)a[c]=1;
                else a[c]+=a[c-1];
            }
        }
         return Arrays.asList(a);
    }
}

簡寫:

import java.util.Arrays;
import java.util.List;

class Solution {
    public List<Integer> getRow(int rowIndex) {
        Integer[] a=new Integer[rowIndex+1];
        for(int r=0;r<=rowIndex;r++) for(int c=r;c>=0;c--)a[c]=(c==0||c==r)?1:a[c]+a[c-1];
         return Arrays.asList(a);
    }
}

優化:

import java.util.Arrays;
import java.util.List;

class Solution {
    public List<Integer> getRow(int rowIndex) {
        Integer[] a=new Integer[rowIndex+1];
        a[0]=1;
        for(int r=1;r<=rowIndex;r++) for(int c=r;c>=1;c--)a[c]=(c==r)?1:a[c]+a[c-1];
         return Arrays.asList(a);
    }
}