刷题使我快乐,满脸开心.jpg

  • 来源:力扣(LeetCode)
  • 链接:https://leetcode.cn/problems/form-smallest-number-from-two-digit-arrays
  • 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目

给你两个只包含 19 之间数字的数组 nums1nums2 ,每个数组中的元素 互不相同 ,请你返回 最小 的数字,两个数组都 至少 包含这个数字的某个数位。

示例 1:

输入:nums1 = [4,1,3], nums2 = [5,7]
输出:15
解释:数字 15 的数位 1 在 nums1 中出现,数位 5 在 nums2 中出现。15 是我们能得到的最小数字。

示例 2:

输入:nums1 = [3,5,2,6], nums2 = [3,1,7]
输出:3
解释:数字 3 的数位 3 在两个数组中都出现了。

提示:

  • 1 <= nums1.length, nums2.length <= 9
  • 1 <= nums1[i], nums2[i] <= 9
  • 每个数组中,元素互不相同

思路

  • 先看是不是有一样的数字,没有再各取一个最小的,一个十位数,一个个位数,试一下比大小即可

代码

func minNumber(nums1 []int, nums2 []int) int {
    res := getSameNum(nums1, nums2)
    if res != 10 {
        return res;
    }
    x, y := nums1[0], nums2[0]
    for _, num := range nums1 {
        x = min(x, num)
    }
    for _, num := range nums2 {
        y = min(y, num)
    }
    return min(x * 10 + y, y * 10 + x)
}

func getSameNum(nums1 []int, nums2 []int) int {
    numMap := make(map[int]bool, 0)
    res := 10
    for _, num := range nums1 {
        numMap[num] = true
    }
    for _, num := range nums2 {
        if _, ok := numMap[num]; ok {
            res = min(res, num)
        }
    }
    return res
}

func min(x int, y int) int {
    if x > y {
        return y
    }
    return x
}