杨辉三角
题目地址: 118. 杨辉三角 - 力扣(LeetCode) (leetcode-cn.com)
首先来看下什么是杨辉三角
解题思路:(参考官方题解,一开始不知道啥是杨辉三角?hh)
- 使用两个
List
集合ret父集合
,row子集合
- 每次for循环开始新建一个row新的集合存放子集合
- 如果
j==0
或j==i
意味着遍历到子集合的开头和末尾,这时就在添加元素1
- 否则就添加元素(父集合中第(i-1)个位置的子集合的第(j-1)个元素+父集合中第(i-1)个位置的子元素集合的第(j)个元素)
- 最后将子集合添加到父集合中,返回即可!
class Solution {
public List<List<Integer>> generate(int numRows) {
ArrayList<List<Integer>> ret = new ArrayList<>();
for (int i = 0; i < numRows; i++) {
ArrayList<Integer> row = new ArrayList<>();
for (int j=0;j<=i;++j){
if (j==0||j==i){
row.add(1);
}else {
row.add(ret.get(i-1).get(j-1)+ret.get(i-1).get(j));
}
}
ret.add(row);
}
return ret;
}
}
复杂度分析
- 时间复杂度:O(\textit{numRows}^2)O(numRows2)。
- 空间复杂度:O(1)O(1)。不考虑返回值的空间占用
杨辉三角 II
题目地址:119. 杨辉三角 II - 力扣(LeetCode) (leetcode-cn.com)
- 在杨辉三角1中做小小改动即可!
class Solution {
public List<Integer> getRow(int rowIndex) {
List<List<Integer>> ret = new ArrayList<List<Integer>>();
for (int i = 0; i <= rowIndex; ++i) {
List<Integer> row = new ArrayList<Integer>();
for (int j = 0; j <= i; ++j) {
if (j == 0 || j == i) {
row.add(1);
} else {
row.add(ret.get(i - 1).get(j - 1) + ret.get(i - 1).get(j));
}
}
ret.add(row);
}
return ret.get(rowIndex);
}
}
移除元素
题目地址:27. 移除元素 - 力扣(LeetCode) (leetcode-cn.com)
- 思路:快慢指针
class Solution {
public int removeElement(int[] nums, int val) {
// 快慢指针
int fastIndex = 0;
int slowIndex;
for (slowIndex = 0; fastIndex < nums.length; fastIndex++) {
if (nums[fastIndex] != val) {
nums[slowIndex] = nums[fastIndex];
slowIndex++;
}
}
return slowIndex;
}
}
代码均由力扣编译器,提交通过,描述编写不当地方还请大家评论区指出💪!