持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情
118.杨辉三角
思路
题目的本身的思路并不是很难,就是
i行j列的数等于i-1行j列的数加上i-1行j-1列的数相加的和。 用c语言写的话比较麻烦,需要自己开辟一个二维数组。 用C++就比较舒服了。首先我们开numRows行,里面的元素类型为vector<int>。我们用的是vector里面的resize![]()
resize表示重新分配多少有用的空间。value_type为模板实参的类型,表示把比以前多出来的空间初始化为val。 接下来我们继续更改每个vector<int>的空间。同时把新增的有用的空间初始为0。同时把第一个和最后一个修改成1。 这里我们用到的是front和back。![]()
返回第一个,最后一个的引用。做好这些之后,最后按上面的操作加就可以了。
代码
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> vv;
vv.resize(numRows);
for(int i=0;i<numRows;++i)
{
vv[i].resize(i+1,0);
vv[i].front()=vv[i].back()=1;
}
for(int i=2;i<numRows;++i)
{
for(int j=1;j<vv[i].size()-1;++j)
{
vv[i][j]=vv[i-1][j]+vv[i-1][j-1];
}
}
return vv;
}
};
26.删除有序数组中的重复项
思路
因为数组中的数是有序的,所以我们用前后指针法。判断前一个数是否和后面的数相等。如果相等,那么后指针继续往后遍历,发现数不同的时候,就把该数覆盖给前指针所指的数。直到遍历完。
代码
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
size_t a,b;
a=b=0;
for(;b<nums.size();++b)
{
if(nums[a]!=nums[b])
{
nums[++a]=nums[b];
}
}
nums.resize(a+1);
return a+1;
}
};