LeetCode 3270: Find the Key of the Numbers (Digit-wise Minimum with Zero Padding)
LeetCode 3270MathSimulationSource: https://leetcode.com/problems/find-the-key-of-the-numbers/
English
Pad all three numbers to 4 digits (leading zeros), then for each position take the minimum digit among the three numbers. Combine the 4 minimum digits back into the key.
Implement from right to left using modulo and division in exactly 4 rounds. Time complexity is O(1), space complexity is O(1).
Reference Implementations (Java / Go / C++ / Python / JavaScript)
class Solution {
public int generateKey(int num1, int num2, int num3) {
int ans = 0;
int place = 1;
for (int i = 0; i < 4; i++) {
int d1 = num1 % 10;
int d2 = num2 % 10;
int d3 = num3 % 10;
int md = Math.min(d1, Math.min(d2, d3));
ans += md * place;
place *= 10;
num1 /= 10; num2 /= 10; num3 /= 10;
}
return ans;
}
}func generateKey(num1 int, num2 int, num3 int) int {
ans, place := 0, 1
for i := 0; i < 4; i++ {
d1, d2, d3 := num1%10, num2%10, num3%10
md := min(d1, min(d2, d3))
ans += md * place
place *= 10
num1 /= 10
num2 /= 10
num3 /= 10
}
return ans
}
func min(a, b int) int {
if a < b {
return a
}
return b
}class Solution {
public:
int generateKey(int num1, int num2, int num3) {
int ans = 0, place = 1;
for (int i = 0; i < 4; ++i) {
int d1 = num1 % 10, d2 = num2 % 10, d3 = num3 % 10;
int md = min(d1, min(d2, d3));
ans += md * place;
place *= 10;
num1 /= 10; num2 /= 10; num3 /= 10;
}
return ans;
}
};class Solution:
def generateKey(self, num1: int, num2: int, num3: int) -> int:
ans = 0
place = 1
for _ in range(4):
d1, d2, d3 = num1 % 10, num2 % 10, num3 % 10
ans += min(d1, d2, d3) * place
place *= 10
num1 //= 10
num2 //= 10
num3 //= 10
return ansvar generateKey = function(num1, num2, num3) {
let ans = 0, place = 1;
for (let i = 0; i < 4; i++) {
const d1 = num1 % 10, d2 = num2 % 10, d3 = num3 % 10;
const md = Math.min(d1, d2, d3);
ans += md * place;
place *= 10;
num1 = Math.floor(num1 / 10);
num2 = Math.floor(num2 / 10);
num3 = Math.floor(num3 / 10);
}
return ans;
};中文
把三个数字都按 4 位处理(不足补前导 0),对每一位取三个数字中的最小值,最后把这 4 个最小位重新拼成答案。
实现时从个位开始做 4 轮:每轮用取模拿当前位、整除去掉当前位。时间复杂度 O(1),空间复杂度 O(1)。
多语言参考实现(Java / Go / C++ / Python / JavaScript)
class Solution {
public int generateKey(int num1, int num2, int num3) {
int ans = 0;
int place = 1;
for (int i = 0; i < 4; i++) {
int d1 = num1 % 10;
int d2 = num2 % 10;
int d3 = num3 % 10;
int md = Math.min(d1, Math.min(d2, d3));
ans += md * place;
place *= 10;
num1 /= 10; num2 /= 10; num3 /= 10;
}
return ans;
}
}func generateKey(num1 int, num2 int, num3 int) int {
ans, place := 0, 1
for i := 0; i < 4; i++ {
d1, d2, d3 := num1%10, num2%10, num3%10
md := min(d1, min(d2, d3))
ans += md * place
place *= 10
num1 /= 10
num2 /= 10
num3 /= 10
}
return ans
}
func min(a, b int) int {
if a < b {
return a
}
return b
}class Solution {
public:
int generateKey(int num1, int num2, int num3) {
int ans = 0, place = 1;
for (int i = 0; i < 4; ++i) {
int d1 = num1 % 10, d2 = num2 % 10, d3 = num3 % 10;
int md = min(d1, min(d2, d3));
ans += md * place;
place *= 10;
num1 /= 10; num2 /= 10; num3 /= 10;
}
return ans;
}
};class Solution:
def generateKey(self, num1: int, num2: int, num3: int) -> int:
ans = 0
place = 1
for _ in range(4):
d1, d2, d3 = num1 % 10, num2 % 10, num3 % 10
ans += min(d1, d2, d3) * place
place *= 10
num1 //= 10
num2 //= 10
num3 //= 10
return ansvar generateKey = function(num1, num2, num3) {
let ans = 0, place = 1;
for (let i = 0; i < 4; i++) {
const d1 = num1 % 10, d2 = num2 % 10, d3 = num3 % 10;
const md = Math.min(d1, d2, d3);
ans += md * place;
place *= 10;
num1 = Math.floor(num1 / 10);
num2 = Math.floor(num2 / 10);
num3 = Math.floor(num3 / 10);
}
return ans;
};
Comments