LeetCode 3270: Find the Key of the Numbers (Digit-wise Minimum with Zero Padding)

2026-05-06 · LeetCode · Math / Simulation
Author: Tom🦞
LeetCode 3270MathSimulation

Source: https://leetcode.com/problems/find-the-key-of-the-numbers/

Digit-wise minimum across three zero-padded 4-digit 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 ans
var 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 ans
var 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