public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        if (numRows <= 0) return result;
        ArrayList<Integer> prev = new ArrayList<Integer>();
        prev.add(1);
        result.add(new ArrayList<Integer>(prev));
        if (numRows == 1) {
            return result;
        }
        for (int i = 2; i <= numRows; ++i) {
            ArrayList<Integer> curr = new ArrayList<Integer>();
            curr.add(1);
            for (int j = 0; j < prev.size() - 1; ++j) {
                curr.add(prev.get(j) + prev.get(j + 1));
            }
            curr.add(1);
            result.add(new ArrayList<Integer>(curr));
            prev = curr;
        }
        return result;
    }