刷题使我快乐,满脸开心.jpg
- 来源:力扣(LeetCode)
- 链接:https://leetcode.cn/problems/form-smallest-number-from-two-digit-arrays
- 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目
给你两个只包含 1
到 9
之间数字的数组 nums1
和 nums2
,每个数组中的元素 互不相同
,请你返回 最小
的数字,两个数组都 至少
包含这个数字的某个数位。
示例 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
}