大家好我是苏麟 , 今天开始带来LeetCode编程从0到1系列 .
编程基础 0 到 1 , 50 题掌握基础编程能力
1768.交替合并字符串
描述 :
给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。
返回 合并后的字符串 。
题目 :
- 交替合并字符串
LeetCode : 交替合并字符串
代码 :
class Solution {
public String mergeAlternately(String word1, String word2) {
int m = word1.length(), n = word2.length();
int i = 0, j = 0;
StringBuilder ans = new StringBuilder();
while (i < m || j < n) {
if (i < m) {
ans.append(word1.charAt(i));
++i;
}
if (j < n) {
ans.append(word2.charAt(j));
++j;
}
}
return ans.toString();
}
}
389. 找不同
描述 :
给定两个字符串 s 和 t ,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
题目 :
LeetCode 389. 找不同 :
找不同
分析 :
这道题用位运算还是比较好做的 .
代码 :
class Solution {
public char findTheDifference(String s, String t) {
int n = 0;
int a = s.length();
int b = t.length();
for(int i = 0 ;i < a;i++){
n ^= s.charAt(i);
}
for(int i = 0 ;i < b;i++){
n ^= t.charAt(i);
}
return (char) n;
}
}
28. 找出字符串中第一个匹配项的下标
描述 ;
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。
題目 :
LeetCode : 找出字符串中第一个匹配项的下标
偷懒的代码 :
class Solution {
public int strStr(String haystack, String needle) {
return haystack.indexOf(needle);
}
}
暴力代码 :
class Solution {
public int strStr(String haystack, String needle) {
int n = haystack.length(), m = needle.length();
for (int i = 0; i + m <= n; i++) {
boolean flag = true;
for (int j = 0; j < m; j++) {
if (haystack.charAt(i + j) != needle.charAt(j)) {
flag = false;
break;
}
}
if (flag) {
return i;
}
}
return -1;
}
}
242. 有效的字母异位词
描述 :
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
题目 :
LeetCode 有效的字母异位词
代码 :
class Solution {
public boolean isAnagram(String s, String t) {
char[] arr = s.toCharArray();
char[] brr = t.toCharArray();
Arrays.sort(arr);
Arrays.sort(brr);
return new String(arr).equals(new String(brr));
}
}
459. 重复的子字符串
描述 :
给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成
题目 :
LeetCode 重复的子字符串
代码 :
class Solution {
public boolean repeatedSubstringPattern(String s) {
return (s + s).indexOf(s,1) != s.length();
}
}
283. 移动零
描述 :
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
题目 :
LeetCode 移动零
分析 :
这道题双指针就解决掉了 .
代码 :
class Solution {
public void moveZeroes(int[] nums) {
int n = nums.length;
int left = 0;
int right = 0;
while(right < n){
if(nums[right] != 0){
swap(nums,left,right);
left++;
}
right++;
}
Arrays.toString(nums);
}
public void swap(int[] arr,int a,int b){
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
}
66. 加一
描述 :
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
题目 :
LeetCode 加一
代码 :
class Solution {
public int[] plusOne(int[] digits) {
int len = digits.length;
for(int i = len - 1;i >= 0 ;i--){
digits[i]++;
digits[i] %= 10;
if(digits[i] != 0){
return digits;
}
}
int[] arr = new int[len + 1];
arr[0] = 1;
return arr;
}
}
1822. 数组元素积的符号
描述 :
已知函数 signFunc(x) 将会根据 x 的正负返回特定值:
如果 x 是正数,返回 1 。
如果 x 是负数,返回 -1 。
如果 x 是等于 0 ,返回 0 。
给你一个整数数组 nums 。令 product 为数组 nums 中所有元素值的乘积。
返回 signFunc(product) 。
题目 :
LeetCode 数组元素积的符号
代码 :
class Solution {
public int arraySign(int[] nums) {
int count = 1;
for(int i = 0;i < nums.length;i++){
if(nums[i] == 0){
return 0;
}else if(nums[i] < 0){
count = -count;
}
}
return count;
}
}
1502. 判断能否形成等差数列
描述 :
给你一个数字数组 arr 。
如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列
如果可以重新排列数组形成等差数列,请返回 true ;否则,返回 false 。
题目 :
LeetCode 判断能否形成等差数列
代码 :
class Solution {
public boolean canMakeArithmeticProgression(int[] arr) {
Arrays.sort(arr);
int n = arr[1] -arr[0];
for(int i = 0;i < arr.length - 1;i++){
if(arr[i + 1] - arr[i] != n){
return false;
}
}
return true;
}
}
896. 单调数列
描述 :
如果数组是单调递增或单调递减的,那么它是 单调 的。
如果对于所有 i <= j,nums[i] <= nums[j],那么数组 nums 是单调递增的。 如果对于所有 i <= j,nums[i]> = nums[j],那么数组 nums 是单调递减的。
当给定的数组 nums 是单调数组时返回 true,否则返回 false。
题目 :
LeetCode 单调数列
代码 :
class Solution {
public boolean isMonotonic(int[] nums) {
int len = nums.length;
return isAsc(nums,len) || isDesc(nums,len);
}
//升序
public boolean isAsc(int[] nums,int len){
for(int i = 0;i < len -1;i++){
if(nums[i] > nums[i+1]){
return false;
}
}
return true;
}
//降序
public boolean isDesc(int[] nums,int len){
for(int i = 0;i < len -1;i++){
if(nums[i] < nums[i+1]){
return false;
}
}
return true;
}
}
13. 罗马数字转整数
描述 :
例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。
题目 :
LeetCode 罗马数字转整数
代码 :文章来源:https://www.toymoban.com/news/detail-811221.html
class Solution {
public int romanToInt(String s) {
List<Integer> list = new ArrayList<>();
for(int i = 0;i < s.length();i++){
char temp = s.charAt(i);
switch(temp){
case 'I':
list.add(1);
break;
case 'V':
list.add(5);
break;
case 'X':
list.add(10);
break;
case 'L':
list.add(50);
break;
case 'C':
list.add(100);
break;
case 'D':
list.add(500);
break;
case 'M':
list.add(1000);
break;
}
}
int num = 0;
for(int i = 0;i < list.size();i++){
int a = list.get(i);
if(i < list.size() - 1 && a < list.get(i + 1)){
num -= a;
}else{
num += a;
}
}
return num;
}
}
这期就到这里 , 下期见!文章来源地址https://www.toymoban.com/news/detail-811221.html
到了这里,关于算法通关村番外篇-LeetCode编程从0到1系列一的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!