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

本文作者使用Java语言介绍了LeetCode上的五道算法题:加一、计算平方根、爬楼梯问题、删除排序链表中的重复元素以及二进制求和。每道题都提供了详细的解释和代码实现。
  • 💂 作者:烧洋芋的土豆
  • 🤟 内容:使用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;
    }
}

在这里插入图片描述

🐒 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;
    }
}

在这里插入图片描述

🐏 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;
    }
}

在这里插入图片描述

🐇 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;
    }
}

在这里插入图片描述

🐯 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基础知识来实现的,还有个别题用到了里面的方法偷个懒,后续的题目会越来越难,希望大家多多鼓励,让我们一起坚持下来,一起加油 ! ! !

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值