在哪一个网站做社保申报,做语音聊天网站要多少钱,个人网站效果图,wordpress自动更新发布杨辉三角
给定一个非负整数 numRows#xff0c;生成「杨辉三角」的前 numRows 行。
在「杨辉三角」中#xff0c;每个数是它左上方和右上方的数的和。 示例 1:
输入: numRows 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2:
输入: numRows 1
输出: [[1]]
…杨辉三角
给定一个非负整数 numRows生成「杨辉三角」的前 numRows 行。
在「杨辉三角」中每个数是它左上方和右上方的数的和。 示例 1:
输入: numRows 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2:
输入: numRows 1
输出: [[1]]
解题思路
杨辉三角Pascals Triangle是一个由数字排列成的三角形每个数字等于其上方两个数字之和。下面是两种方案的解题思路及对应的Java代码。
解题思路 使用二维数组 创建一个二维数组来存储杨辉三角的每一行。第一行和第二行的元素为1。从第三行开始每个元素为其上方两个元素的和。逐行填充数组直到达到所需的行数。 使用顺序表ArrayList 使用ArrayList来存储每一行的内容。每一行创建一个新的ArrayList第一列和最后一列为1。中间的元素则由前一行的两个上方元素相加得出。最终将每一行的ArrayList添加到一个大的ArrayList中。
方案一使用二维数组
public class PascalTriangle {public int[][] generate(int numRows) {int[][] triangle new int[numRows][];for (int i 0; i numRows; i) {triangle[i] new int[i 1]; // 每行的长度triangle[i][0] 1; // 第一列赋值为1triangle[i][i] 1; // 最后一列赋值为1for (int j 1; j i; j) {triangle[i][j] triangle[i - 1][j - 1] triangle[i - 1][j];}}return triangle;}public static void main(String[] args) {PascalTriangle pt new PascalTriangle();int[][] result pt.generate(5); // 生成前5行的杨辉三角for (int[] row : result) {for (int num : row) {System.out.print(num );}System.out.println();}}
}方案二使用顺序表ArrayList
import java.util.ArrayList;
import java.util.List;public class PascalTriangle {public ListListInteger generate(int numRows) {ListListInteger triangle new ArrayList();for (int i 0; i numRows; i) {ListInteger row new ArrayList();row.add(1); // 第一列赋值为1if (i 0) {ListInteger prevRow triangle.get(i - 1);for (int j 1; j i; j) {// 中间的元素row.add(prevRow.get(j - 1) prevRow.get(j));}row.add(1); // 最后一列赋值为1}triangle.add(row);}return triangle;}public static void main(String[] args) {PascalTriangle pt new PascalTriangle();ListListInteger result pt.generate(5); // 生成前5行的杨辉三角for (ListInteger row : result) {for (int num : row) {System.out.print(num );}System.out.println();}}
}总结
两种方案都能够有效地生成杨辉三角使用二维数组的方式在内存上相对更高效而使用ArrayList的方法更加灵活适合需要动态调整大小情况下的存储需求。根据实际情况选择合适的方案。