给出一个索引k,返回杨辉三角的第k行
例如,k=3,
返回[1,3,3,1].
备注:
你能将你的算法优化到只使用O(k)的额外空间吗?
import java.util.*;
public class Solution {
public ArrayList<Integer> getRow(int rowIndex) {
ArrayList<Integer> list = new ArrayList<>(rowIndex+1);
list.add(1);
for(int i = 1; i <= rowIndex; i++){
list.add(0);
};
for(int i = 1; i <= rowIndex; i++){
int tmp = 1;
for(int j = 1; j <= i; j++ ){
int now = tmp+list.get(j);
tmp = list.get(j);
list.set(j, now);
}
}
return list;
}
} import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> getRow(int rowIndex) {
ArrayList<Integer> list = new ArrayList<>();
for(int i = 0; i <= rowIndex;i ++){
list.add(1);
}
for(int i = 0; i <= rowIndex; i++){
//从后往前遍历,防止上一行的左右两个数中的左边数在使用时已被更改
for(int j = i; j >= 0; j--){
if(j == i || j == 0){
continue;
}
else{
list.set(j, list.get(j-1) + list.get(j));
}
}
}
return list;
}
}
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> getRow(int rowIndex) {
ArrayList<Integer> list = new ArrayList<>();
int n = rowIndex + 1;
//防止溢出,使用long
long number = 1;
for(int i = 1; i <= n; i++){
list.add((int)number);
number = number * (n - i) / i;
}
return list;
}
} import java.util.*;
public class Solution {
public ArrayList<Integer> getRow(int rowIndex) {
int a[] = new int[rowIndex+1];
int b[] = new int[rowIndex+1];
a[0] = 1;
int indexa = 1;
int indexb = 0;
int index=1;//偶数行
while(index <= rowIndex){
if(index%2==0){
for(int i=0;i<=indexb;i++)
if(i==0 || i==indexb)
a[i]=1;
else
a[i]=b[i]+b[i-1];
indexa = indexb+1;
}else{
for(int i=0;i<=indexa;i++)
if(i==0 || i==indexa)
b[i]=1;
else
b[i]=a[i]+a[i-1];
indexb = indexa+1;
}
index++;
}
ArrayList<Integer> list = new ArrayList<Integer>();
if(rowIndex%2==0)
for(int i=0;i<indexa;i++)
list.add(a[i]);
else
for(int i=0;i<indexb;i++)
list.add(b[i]);
return list;
}
} public ArrayList<Integer> getRow(int rowIndex) {
ArrayList<Integer> row = new ArrayList<Integer>();
if (rowIndex < 0)
return row;
row.add(1);
for (int i = 0; i < rowIndex; i++) {
for (int j = i ; j > 0; j--) {
row.set(j, row.get(j) + row.get(j - 1));
}
row.add(1);
}
return row;
}
import java.util.*;
public class Solution {
public ArrayList<Integer> getRow(int rowIndex) {
ArrayList<Integer> res = new ArrayList<Integer>();
if(rowIndex==0) {
res.add(1);
return res;}
int[][] a = new int[rowIndex+1][rowIndex+1];
for (int i = 0; i < rowIndex+1; i++) {
Arrays.fill(a[i], 1);
}
//a[0][0]=1;a[1][0]=1;a[1][1]=1;
for(int i=2;i<rowIndex+1;i++){
for(int j=1;j<i;j++){
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
}
res.add(1);
for(int i =1;i<rowIndex;i++){
res.add(a[rowIndex][i]);
}
res.add(1);
return res;
}
} import java.util.*;
public class Solution {
public ArrayList<Integer> getRow(int rowIndex) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
if (rowIndex <= 0)
return list;
for (int k = 1; k <= rowIndex; ++k) {
if (k == 1) {
list.add(1);
continue;
}
for (int i = 0; i < k + 1; ++i) {
if (i == 0 || i == k) {
list.add(1);
continue;
}
list.add(list.get(i - 1) + list.get(i));
}
for (int i = k - 1; i >= 0; --i) {
list.remove(i);
}
}
return list;
}
} public ArrayList<Integer> getRow(int rowIndex) {
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0;i<=rowIndex;i++){
if(i==0) {list.add(1);continue;}
for(int j=0;j<list.size()-1;j++){
int m=list.get(j+1);
list.set(j+1,list.get(0)+list.get(j+1));
list.set(0,m);
}
list.set(0,1);
list.add(1);
}
return list;
} //思路:从后往前计算,从而避免了之前的数据被覆盖。满足空间复杂度为O(n)
public ArrayList<Integer> getRow(int rowIndex) {
ArrayList<Integer> row=new ArrayList<>();
if(rowIndex<0) return row;
for(int i=0;i<rowIndex+1;i++){
for(int j=i-1;j>0;j--){
row.set(j,row.get(j)+row.get(j-1));
}
row.add(1);
}
return row;
}