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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
学海无涯啊,慢慢加油!