困难
注意:在这个问题中,操作次数增加为至多 两次 。
给你一个正整数数组 nums 。
如果我们执行以下操作 至多两次 可以让两个整数 x 和 y 相等,那么我们称这个数对是 近似相等 的:
- 选择
x或者y之一,将这个数字中的两个数位交换。
请你返回 nums 中,下标 i 和 j 满足 i < j 且 nums[i] 和 nums[j] 近似相等 的数对数目。
注意 ,执行操作后得到的整数可以有前导 0 。
示例 1:
输入:nums = [1023,2310,2130,213]
输出:4
解释:
近似相等数对包括:
- 1023 和 2310 。交换 1023 中数位 1 和 2 ,然后交换数位 0 和 3 ,得到 2310 。
- 1023 和 213 。交换 1023 中数位 1 和 0 ,然后交换数位 1 和 2 ,得到 0213 ,也就是 213 。
- 2310 和 213 。交换 2310 中数位 2 和 0 ,然后交换数位 3 和 2 ,得到 0213 ,也就是 213 。
- 2310 和 2130 。交换 2310 中数位 3 和 1 ,得到 2130 。
示例 2:
输入:nums = [1,10,100]
输出:3
解释:
近似相等数对包括:
- 1 和 10 。交换 10 中数位 1 和 0 ,得到 01 ,也就是 1 。
- 1 和 100 。交换 100 中数位 1 和从左往右的第二个 0 ,得到 001 ,也就是 1 。
- 10 和 100 。交换 100 中数位 1 和从左往右的第一个 0 ,得到 010 ,也就是 10 。
提示:
2 <= nums.length <= 50001 <= nums[i] < 107