如何在java 8中将二维数组或任何数组转换为List<List<Integer>>?

Dho*_*nav 2 java

假设有一个数组Integer[][] a; 那么在java 8中如何将其转换aList<List<Integer>>?这是我的 leetcode Pascal's trianagle 代码

class Solution {
    public List<List<Integer>> generate(int numRows) {

        Integer[][] a = new Integer[numRows][numRows];
        a[0][0] = 1;
        for(int i=0;i<numRows;i++) {
            a[i][0] = 1;
            for(int j=0;j<=i;j++) {
                if(i == j) 
                    a[i][j] = 1;
                    else {
                        a[i][j] = a[i-1][j-1] + a[i-1][j];
                    }
            }
        }
       return ______;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我应该在 return 语句中写什么?

Emm*_*mma 5

这会过去的。我们将对所有行使用ArrayList<>()of 类型List<List<Integer>(这是所需的输出)ArrayList<>(),对临时行使用一个类型:

class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> rows = new ArrayList<>();
        ArrayList<Integer> row = new ArrayList<>();
        for (int i = 0; i < numRows; i++) {
            row.add(0, 1);
            for (int j = 1; j < row.size() - 1; j++)
                row.set(j, row.get(j) + row.get(j + 1));
            rows.add(new ArrayList<Integer>(row));
        }
        return rows;
    }
}

Run Code Online (Sandbox Code Playgroud)

帕斯卡三角问题还有一个数学解决方案(例如,在 Python 中):

import math


class Solution:
    def generate(self, size):
        if size < 0:
            return [[1]]
        rows = []
        for n in range(size):
            row = []
            for r in range(n + 1):
                row.append(math.factorial(n) // math.factorial(r) // math.factorial(n - r))
            rows.append(row)
        return rows

Run Code Online (Sandbox Code Playgroud)

参考

  • 有关其他详细信息,请参阅讨论板,在那里您可以找到大量解释清楚的公认解决方案,其中包含各种语言,包括低复杂度算法和渐近运行时/内存分析12