Leetcode Task06 完成43、46、53题目并打卡
043 字符串相乘
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
public class Solution {
public String multiply(String num1, String num2) {
int n1 = num1.length();
int n2 = num2.length();
char[] array1 = num1.toCharArray();
char[] array2 = num2.toCharArray();
if(array1[0] == '0' || array2[0] == '0') {
return "0";
}
String[] strings = new String[n2];
for (int i = n2 - 1; i >= 0; i--) {
String string = "";
int flag = 0;
for (int j = n1 - 1; j >= 0; j--) {
int num = (array1[j] - '0') * (array2[i] - '0');
string += (num + flag) % 10;
flag = (num + flag) / 10;
}
if(flag > 0) {
string += flag;
}
strings[n2 - i - 1] = string;
}
String result = "";
int flag = 0;
for (int i = 0; i < strings[n2 - 1].length() + n2 - 1; i++) {
int sum = 0;
for (int j = 0; j < n2; j++) {
if(i - j < strings[j].length() && i - j >= 0) {
sum += strings[j].charAt(i - j) - '0';
}
}
int num = (sum + flag) % 10;
flag = (sum + flag) / 10;
result = num + result;
}
if(flag > 0) {
result = flag + result;
}
return result;
}
}
046 全排列
Given a collection of distinct integers, return all possible permutations.
给定⼀个没有重复数字的序列,返回其所有可能的全排列。
举例
Input: [1,2,3]
Output:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
解题思路
求出⼀个数组的排列组合中的所有排列,⽤ DFS 深搜即可。
public class Solution {
List<List<Integer>> listList;
public List<List<Integer>> permute(int[] nums) {
listList = new ArrayList<>();
permute(nums, new ArrayList<>());
return listList;
}
//we put the possible array in list, we are going to find next number
private void permute(int[] nums, List<Integer> list) {
int n = nums.length;
if(list.size() == n) {
listList.add(new ArrayList<>(list));
return;
}
for (int i = 0; i < n; i++) {
if(list.contains(nums[i])) {
continue;
}
list.add(nums[i]);
permute(nums, list);
list.remove(list.size() - 1);
}
}
}
053 最大子序列和
Given an integer array nums , find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.
给定⼀个整数数组 nums ,找到⼀个具有最⼤和的连续⼦数组(⼦数组最少包含⼀个元素),返回其最⼤和。
举例
Input: [-2,1,-3,4,-1,2,1,-5,4],
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.
解题思路
- 这⼀题可以⽤ DP 求解也可以不⽤ DP。
- 题⽬要求输出数组中某个区间内数字之和最⼤的那个值。dp[i] 表示 [0,i] 区间内各个⼦区间和的最⼤值,状态转移⽅程是 dp[i] = nums[i] + dp[i-1] (dp[i-1] > 0) , dp[i] =nums[i] (dp[i-1] ≤ 0) 。
class Solution {
public int maxSubArray(int[] nums) {
int result = nums[0];
int sum = 0;
for (int num : nums) {
if (sum >= 0) {
sum += num;
} else {
sum = num;
}
result = Math.max(result, sum);
}
return result;
}
}

浙公网安备 33010602011771号