아날로그 곱셈
오랫동안 직접 사용할 수 없으며 문제는 오버플로가 발생한다는 것입니다.
곱셈을 수동으로 만 시뮬레이션 할 수 있습니다.
class Solution {
public String multiply(String num1, String num2) {
if (num1.equals("0") || num2.equals("0")) {
return "0";
}
String ans = "0";
int m = num1.length(), n = num2.length();
for (int i = n - 1; i >= 0; i--) {
StringBuffer curr = new StringBuffer();
int add = 0;
for (int j = n - 1; j > i; j--) {
curr.append(0); // 模拟× 10 的场景
}
int y = num2.charAt(i) - '0';
for (int j = m - 1; j >= 0; j--) {
int x = num1.charAt(j) - '0';
int product = x * y + add;
curr.append(product % 10);
add = product / 10;
}
if (add != 0) {
curr.append(add % 10);
}
ans = addStrings(ans, curr.reverse().toString());
}
return ans;
}
public String addStrings(String num1, String num2) {
int i = num1.length() - 1, j = num2.length() - 1, add = 0;
StringBuffer ans = new StringBuffer();
while (i >= 0 || j >= 0 || add != 0) {
// add直接在这里处理
int x = i >= 0 ? num1.charAt(i) - '0' : 0; // 防止越位以及最后判断谁越位
int y = j >= 0 ? num2.charAt(j) - '0' : 0;
int result = x + y + add;
ans.append(result % 10); // 本次添加余数
add = result / 10; // 留给下次的是本次的结果
i--;
j--;
}
ans.reverse();
return ans.toString();
}
}
더 간단하게 :
BigDecimal n1 = new BigDecimal(num1);
BigDecimal n2 = new BigDecimal(num2);
BigDecimal res = n1.multiply(n2);
return res.toPlainString();
149. 직선에 가장 많은 점이있는 나무
Y = kx + b
는 모든 kb 를 찾고, 두 점은 kb, n의 제곱의 순회를 결정한
다음 계산 공식을 충족하는 좌표를 열거
하여 가장 큰 수 를 찾습니다.
아날로그 전력
https://leetcode-cn.com/problems/powx-n/
class Solution {
public double myPow(double x, int n) {
long N = n;
return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);
}
public double quickMul(double x, long N) {
if (N == 0) {
return 1.0;
}
double y = quickMul(x, N / 2);
return N % 2 == 0 ? y * y : y * y * x;
}
}
인플레 이스 해시
https://leetcode-cn.com/problems/find-all-duplicates-in-an-array/
문제 해결 아이디어
추가 메모리 공간을 사용하지 않는 경우 배열 요소 만 수정하여 다음 여부를 표시 할 수 있습니다.
원칙에 액세스 한 경우 : 동일한 요소 인 경우 동일한 값의 특정 요소 값의 색인으로 가져 가면이 값을 수정하여 플래그를 지정할 수 있습니다
. 참고 : 요소를 제자리에서 수정해야합니다. 색인으로 자신의 액세스에 영향을 줄 수는 없으며 한 가지 방법이 있습니다. 즉, 요소를 반전하거나 특정 숫자를 더하거나 뺀 다음 방문 할 때 양수를 취하거나 특정 수를 더하거나 빼서 복원하는 것입니다. .
index와 a [index] 사이의 관계를 사용하여
요소 값 n을 취한 다음 a [abs (n)]를 부정합니다.
다음에 a [abs (n)]이 음수이면 이전에 방문한 적이 있음을 의미합니다. 결과 세트를 직접 결합하십시오.
비트 작동
상태를 나타내는 비트를 사용하여 해시의 아이디어와 약간 유사합니다.
하위 집합을 찾는 주제 :
https://leetcode-cn.com/problems/subsets/solution/zi-ji-by-leetcode-solution/
핵심 아이디어 :
- 무차별 대입 검색
- 비트를 사용하여 해당 위치의 배열이 활성화되었는지 여부를 나타냅니다.
핵심 코드 :
for (int mask = 0; mask < (1 << n); ++mask) {
t.clear();
for (int i = 0; i < n; ++i) {
if ((mask & (1 << i)) != 0) {
t.add(nums[i]);
}
}
ans.add(new ArrayList<Integer>(t));
}
암호:
class Solution {
List<Integer> t = new ArrayList<Integer>();
List<List<Integer>> ans = new ArrayList<List<Integer>>();
public List<List<Integer>> subsets(int[] nums) {
int n = nums.length;
for (int mask = 0; mask < (1 << n); ++mask) {
t.clear();
for (int i = 0; i < n; ++i) {
if ((mask & (1 << i)) != 0) {
t.add(nums[i]);
}
}
ans.add(new ArrayList<Integer>(t));
}
return ans;
}
}
폭력적인 해결책 : 작은 문제의 해결책은 큰 문제의 해결책을 구성합니다
기존 세트에 추가 된 새 요소는 새 세트가 된 다음 여기에 던져집니다.
191. 비트 수 1
https://leetcode-cn.com/problems/number-of-1-bits/
키 포인트:
- 32 비트 내에서 즉, << 1의 연산은 최대 32 회입니다.
https://leetcode-cn.com/problems/number-of-1-bits/solution/wei-1de-ge-shu-by-leetcode/
public int hammingWeight(int n) {
int bits = 0;
int mask = 1;
for (int i = 0; i < 32; i++) {
// 最多32次
if ((n & mask) != 0) {
bits++; // 为1的位数
}
mask <<= 1;
}
return bits;
}
AND 연산자는 "&"기호로 표시되며 사용 규칙은 다음과 같습니다.
두 피연산자는 모두 1이고 결과는 1입니다. 그렇지 않으면 결과는 다음 블록과 같이 0입니다.
129 & 128 = 128. "a"의 값은 129이고 2 진수로 변환 된 값은 10000001이고 "b"의 값은 128이고 2 진수로 변환 된 값은 10000000입니다. AND 연산자의 연산 규칙에 따르면 2 비트 만 1이고 결과는 1이며 결과는 10000000 (128)임을 알 수 있습니다.
관련 레코드 정렬
- 작업 스케줄러 : 냉각 시간으로 명령을 실행하는 데 가장 짧은 시간입니다. 621
https://leetcode-cn.com/problems/task-scheduler/
솔루션 1 : 정렬. 정렬은 우선 순위를 확인하는 것으로, 각 라운드에서 가장 큰 값을 가진 요소가 먼저 제거됩니다. - 공개 간격 병합 : https://leetcode-cn.com/problems/merge-intervals/solution/zhen-dui-xin-shou-jian-ji-yi-dong-de-ti-jie-liang-/sort
및 비교 합병 후.
또 다른 해결책 : 부울 배열을 표시합니다.이 솔루션은 공통 간격으로 계산되지 않는 상황을 처리 할 수 없습니다 : [1,4] [5,6]. - 두 개의 정렬 된 사용자 지정 연결 목록 병합 : https://leetcode-cn.com/problems/merge-two-sorted-lists/solution/he-bing-liang-ge-you-xu-lian-biao-by- leetcode /
- 내부 정렬을위한 이중 포인터 방법 : https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/submissions/