118. 杨辉三角

1.题目:

118. 杨辉三角_第1张图片

2.我的代码:

C++:

 

class Solution {
public:
    vector> generate(int numRows) {
        vector> vv;
        vv.resize(numRows);
        for (int i = 0; i < numRows; ++i)
        {
            vv[i].resize(i + 1, 0);
            vv[i].front() = 1;
            vv[i].back() = 1;

            for (int j = 0; j < i + 1; ++j)
            {
                if (vv[i][j] == 0)
                {
                    vv[i][j] = vv[i - 1][j - 1] + vv[i - 1][j];
                }
            }
        }
        return vv;
    }
};

Java:

class Solution {
    public List> generate(int numRows) {
        List> Lists = new ArrayList<>();

        List list1 = new ArrayList<>();
        list1.add(1);
        Lists.add(list1);

        for (int i = 1; i < numRows; ++i) {
            List list = new ArrayList<>();

            list.add(1);

            List preRow = Lists.get(i - 1);
            for (int j = 1; j < i; ++j) {
                list.add(preRow.get(j - 1) + preRow.get(j));
            }

            list.add(1);

            Lists.add(list);
        }

        return Lists;
    }
}

3.答案代码:
C++:

/*

*思路:

* 1. 找出杨辉三角的规律,发现每一行头尾都是1,中间第[j]个数等于上一行[j-1]+[j]

*/

class Solution 

{

public:

	// 核心思想:找出杨辉三角的规律,发现每一行头尾都是1,中间第[j]个数等于上一行[j-1]+[j]

	vector> generate(int numRows) 

	{

		vector> vv;

		// 先开辟杨辉三角的空间

		vv.resize(numRows);

		for (size_t i = 1; i <= numRows; ++i)

		{

			vv[i - 1].resize(i, 0);

			// 每一行的第一个和最后一个都是1

			vv[i - 1][0] = 1;

			vv[i - 1][i - 1] = 1;

		}

		for (size_t i = 0; i < vv.size(); ++i)

		{

			for (size_t j = 0; j < vv[i].size(); ++j)

			{

				if (vv[i][j] == 0)

				{

					vv[i][j] = vv[i - 1][j - 1] + vv[i - 1][j];

				}

			}

		}

		return vv;

	}

};

Java:

你可能感兴趣的:(java,算法,leetcode,c++)