1.杨辉三角
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例 1:
输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
``
class Solution {
public List> generate(int numRows) {
List> ret = new ArrayList>(); //定义链表
for(int i=0;i row = new ArrayList();
for(int j=0;j<=i;j++){
if(j==0 || j==i){
row.add(1); //add()用法
}else{
row.add(ret.get(i-1).get(j-1)+ret.get(i-1).get(j));
}
}ret.add(row);
}return ret;
} }
2.杨辉三角 II
给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
class Solution {
public List getRow(int rowIndex) {
List> ret = new ArrayList>();
for(int i=0;i 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.get(rowIndex);
}
}
3.反转字符串中的单词 III
给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
class Solution {
public String reverseWords(String s) {
String[] strs=s.split(" ");
StringBuilder result = new StringBuilder("");
for(int i=0;i
4.删除有序数组中的重复项
解题思路
使用双指针:
fast指向重复的元素位置,使用 nums[fast] ?=nums[fast-1]
slow指针指向可覆盖位置**(! !仅此作用)**
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序
应该保持 一致 。
由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums
的前 k 个元素应该保存最终结果。
将最终结果插入 nums 的前 k 个位置后返回 k 。
不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
class Solution {
public int removeDuplicates(int[] nums) {
int n=nums.length;
if(n==0){ //先判断是否为空
return 0;
}
int fast=1,slow=1; //定义双指针,查找重复和查找覆盖位置从位置1开始
while(fast
5.移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 输入: nums =
[0,1,0,3,12] 输出: [1,3,12,0,0]
解题思路: 双指针
class Solution {
public void moveZeroes(int[] nums) {
if(nums==null){
return ;
}
int n=nums.length;
int fast=0;
for(int slow=0;slow 


