JavaLeedCode新手村学习6

63 阅读3分钟

JavaLeedCode新手村学习之第六天 day06

人之为学,不日进则日退。——顾炎武《与友人书》

回顾昨日:

1.搜索插入位置

题目: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。

解题思路: 经过前几天的算法练习,在做这道题时我首先想到的是先判断特殊情况,也就是target小于数组0索引和大于数组尾索引的值,在来进行二分查找 收获: 复习了一下二分查找,学会了>>位移运算符的使用

2.最后一个单词长度

题目: 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。

单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 解题思路: 看完题目和示例后,立马想到可以用spilt()方法对字符串按照空格进行切割,然后直接返回数组中尾索引字符串的长度即可 收获: 对字符串的操作更为熟悉了,观看大佬的代码后,了解到了新方法trim()去除字符串首尾的空格

  • 回顾完后就正式开始今天的学习吧!

一、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然后返回数组jik 实现代码:

class Solution {
    public int[] plusOne(int[] digits) {
        digits[digits.length - 1] = digits[digits.length - 1] + 1;
        return digits;
    }
}

但是在力扣上提交时,却有一个案例没有通过 力扣 这才恍然大悟,这道题原来不是我想的这么简单,琢磨半天后,发现没理解到题目的意思,题目实际上是要对数组的最后一位数+1,如果最后一位是9,则将该为变成0即可,如果所有位都是9,那么将数组开头变为1,在增加一位长度即可,是我在理解的时候理解错了 实现代码:

class Solution {
    public int[] plusOne(int[] digits) {
       for (int i = digits.length - 1; i >= 0; i--) {
            if (digits[i] == 9) {
                digits[i] = 0;
            } else {
                digits[i] += 1;
                return digits;
            }
        }
        digits= new int[digits.length + 1];
        digits[0] = 1;
        return digits;
    }
}

二、67.二进制求和

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

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

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

我的解题思路 将两个字符串转为整数后相加,然后通过一个方法实现,但是这种方式会使操作过后的数字超过长度,在思考怎么用手动模拟竖式计算后,发现自己的理解还是不够于是参考了官方题解 官方题解:

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();
    }
}

作者:力扣官方题解
链接:https://leetcode.cn/problems/add-binary/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

学海无涯啊,慢慢加油!