目录
第一题:118. 杨辉三角
代码实现
class Solution {
public List<List<Integer>> generate(int numRows) {
//结果
List<List<Integer>> res=new ArrayList<>();
//层数
for(int i=0;i<numRows;i++){
//定义行
List<Integer> row=new ArrayList<Integer>();
//每行的元素数
for(int j=0;j<=i;j++){
//首尾为0
if(j==0||i==j){
row.add(1);
}else{//取出上一层数据并计算
row.add(res.get(i-1).get(j-1)+res.get(i-1).get(j));
}
}
res.add(row);
}
return res;
}
}
其他题解:
class Solution {
public List<List<Integer>> generate(int numRows) {
//当没有行数时
if(numRows==0)
{return null;}
//顺序表
List<List<Integer>> res = new ArrayList<>();
//处理第一行
List<Integer> firstRow = new ArrayList<>();
firstRow.add(1);
res.add(firstRow);
//从第二行开始处理
for(int i=1 ; i<numRows ; i++){
//获取上一行prevRow
List<Integer> prevRow = res.get(i-1);
//创建行对象
List<Integer> curRow = new ArrayList<>();
curRow.add(1);//处理每一行第一个元素,为1
//处理每一行中间的元素,杨辉三角里当前元素值等于左上角+右上角
for(int j=1 ; j< i ; j++){
int val = prevRow.get(j) + prevRow.get(j-1);
curRow.add(val);
}
//处理每一行的结尾,也都是1
curRow.add(1);
res.add(curRow);
}
return res;
}
}
第二题:33. 搜索旋转排序数组
代码实现
class Solution {
public int search(int[] nums, int target) {
for(int i=0;i<nums.length;i++){
if(nums[i]==target){
return i;
}
}
return -1;
}
}
第三题:81. 搜索旋转排序数组 II
代码实现
class Solution {
public boolean search(int[] nums, int target) {
return exit(nums,target);
}
public boolean exit(int[] nums,int target){
for(int i=0;i<nums.length;i++){
if(nums[i]==target){
return true;
}
}
return false;
}
}
第四题:153. 寻找旋转排序数组中的最小值
代码实现
class Solution {
public int findMin(int[] nums) {
int min=Integer.MAX_VALUE;
for(int i=0;i<nums.length;i++){
if(min>nums[i]){
min=nums[i];
}
}
return min;
}
}
第五题:70. 爬楼梯
代码实现
//动态规划
class Solution {
public int climbStairs(int n) {
int[] dp=new int[n+1];
dp[0]=1;
dp[1]=1;
for(int i=2;i<=n;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
}
}
第六题:509. 斐波那契数
代码实现
//递归
class Solution {
public int fib(int n) {
if(n==0){
return 0;
}
else if(n==1){
return 1;
}else {
return fib(n-1)+fib(n-2);
}
}
}
//动态规划
class Solution {
public int fib(int n) {
if(n==0){
return 0;
}
int[] dp=new int[n+1];
dp[0]=0;
dp[1]=1;
for(int i=2;i<=n;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
}
}
第七题:1137. 第 N 个泰波那契数
代码实现
//动态规划
class Solution {
public static int tribonacci(int n) {
if(n==0) return 0;
if(n==1) return 1;
int[] dp=new int[n+1];
dp[0]=0;
dp[1]=1;
dp[2]=1;
for(int i=3;i<=n;i++){
dp[i]=dp[i-3]+dp[i-2]+dp[i-1];
}
return dp[n];
}
}
第八题:2006. 差的绝对值为 K 的数对数目
代码实现
class Solution {
public int countKDifference(int[] nums, int k) {
int count=0;
for(int i=0;i<nums.length-1;i++){
for(int j=i+1;j<nums.length;j++){
if(Math.abs(nums[i]-nums[j])==k){
count++;
}
}
}
return count;
}
}
第九题:LCP 01. 猜数字
代码实现
class Solution {
public int game(int[] guess, int[] answer) {
int count=0;
for(int i=0;i<guess.length;i++){
if(guess[i]==answer[i]){
count++;
}
}
return count;
}
}
第十题:LCP 06. 拿硬币
代码实现
class Solution {
public int minCount(int[] coins) {
int count=0;
for(int i=0;i<coins.length;i++){
if(coins[i]%2==0){
count+=coins[i]/2;
}
else{
count+=coins[i]/2+1;
}
}
return count;
}
}
class Solution {
public int minCount(int[] coins) {
int count=0;
for(int i:coins){
if(i%2==0){
count+=i/2;
}
else{
count+=i/2+1;
}
}
return count;
}
}