【简单版】【Java语言刷Leetcode一5道题】Day3

时间:2023-02-02 14:08:27
  • ???? 作者:烧洋芋的土豆
  • ???? 内容:使用Java语言刷Leetcode算法题
  • ???? 技术交流:分享日常学习知识,平常遇到的问题,一些学习资料,一起学习,一起进步。

( )

???? 66. 加一

        给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入:digits = [1,2,3] 输出:[1,2,4] 解释:输入数组表示数字 123。

示例 2:

输入:digits = [4,3,2,1] 输出:[4,3,2,2] 解释:输入数组表示数字 4321。

示例 3:

输入:digits = [0] 输出:[1]

提示:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9

代码和结果图如下:

class Solution {
    public int[] plusOne(int[] digits) {
        //从最后一个数开始遍历开始
    for (int i = digits.length-1; i >= 0; i--) {
            digits[i]++;
            //获取当前数的余数
            digits[i]=digits[i]%10;
            //判断余数是否为0
            if(digits[i]!=0){
                return digits;
            }
        }
        digits=new int[digits.length+1];
        digits[0]=1;
        return digits;
    }
}

【简单版】【Java语言刷Leetcode一5道题】Day3

???? 69. x 的平方根

       给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留整数部分 ,小数部分将被舍去 。

注意:

不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

示例 1:

输入:x = 4 输出:2

示例 2:

输入:x = 8 输出:2 解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。

提示:

  • 0 <= x <= 231 - 1

代码和结果图如下:

class Solution {
    public int mySqrt(int x) {
        //判断是否等于0,返回本身
      if(x==0)return 0;
      //调用求平方根的方法,转化为整数
        int sqrt = (int) Math.sqrt(x);
        return sqrt;
    }
}

【简单版】【Java语言刷Leetcode一5道题】Day3

???? 70. 爬楼梯

       假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

示例 1:

输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。 1 阶 + 1 阶 2 阶

示例 2:

输入:n = 3 输出:3 解释:有三种方法可以爬到楼顶。 1 阶 + 1 阶 + 1 阶 1 阶 + 2 阶 2 阶 + 1 阶

解析:

爬到x级台阶的方案数是爬到第x-1级台阶方案数和爬到x-2方案数之和,因为每次只能爬1级或者2级,这里所以就是求前面2级之和。

代码和结果图如下:

class Solution {
    public int climbStairs(int n) {
        int i=0,j=0,z=1;
        for (int i1 = 1; i1 <= n; i1++) {
            i=j;
            j=z;
            z=i+j;
        }
        return z;
    }
}

【简单版】【Java语言刷Leetcode一5道题】Day3

???? 83. 删除排序链表中的重复元素

       给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次返回已排序的链表 。

示例 1:

输入:head = [1,1,2] 输出:[1,2]

示例 2:

输入:head = [1,1,2,3,3] 输出:[1,2,3]

提示:

  • 链表中节点数目在范围 [0, 300] 内
  • -100 <= Node.val <= 100
  • 题目数据保证链表已经按升序 排列

代码和结果图如下:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        //创建一个链表来代替head
        ListNode cur = head;
        //循环遍历
        while(cur != null && cur.next != null) {
            //判断第一个值和下一个值是否相等
            if(cur.val == cur.next.val) {
                cur.next = cur.next.next;
            } else {
                cur = cur.next;
            }
        }
        return head;
    }
}

【简单版】【Java语言刷Leetcode一5道题】Day3

???? 67. 二进制求和

       给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

示例 1:

输入:a = "11", b = "1" 输出:"100"

示例 2:

输入:a = "1010", b = "1011" 输出:"10101"

提示:

  • 1 <= a.length, b.length <= 104
  • a 和 b 仅由字符 '0' 或 '1' 组成
  • 字符串如果不是 "0" ,就不含前导零

代码和结果图如下:

class Solution {
    public String addBinary(String a, String b) {
        StringBuffer ans = new StringBuffer();
        //获取最大长度
        int n = Math.max(a.length(), b.length()), carry = 0;
        //最大长度遍历
        for (int i = 0; i < n; ++i) {
            carry += i < a.length() ? (a.charAt(a.length() - 1 - i) - '0') : 0;
            carry += i < b.length() ? (b.charAt(b.length() - 1 - i) - '0') : 0;
            //字符串组合
            ans.append((char) (carry % 2 + '0'));
            carry /= 2;
        }

        if (carry > 0) {
            ans.append('1');
        }
        //字符串反向
        ans.reverse();

        return ans.toString();
    }
}

【简单版】【Java语言刷Leetcode一5道题】Day3


???? 总结

       这几道算法题主要是采用Java基础知识来实现的,还有个别题用到了里面的方法偷个懒,后续的题目会越来越难,希望大家多多鼓励,让我们一起坚持下来,一起加油 ! ! !