leetcode3265. 统计近似相等数对 I-medium
1 题目:统计近似相等数对 I
官方标定难度:中
给你一个正整数数组 nums 。
如果我们执行以下操作 至多一次 可以让两个整数 x 和 y 相等,那么我们称这个数对是 近似相等 的:
选择 x 或者 y 之一,将这个数字中的两个数位交换。
请你返回 nums 中,下标 i 和 j 满足 i < j 且 nums[i] 和 nums[j] 近似相等 的数对数目。
注意 ,执行操作后一个整数可以有前导 0 。
示例 1:
输入:nums = [3,12,30,17,21]
输出:2
解释:
近似相等数对包括:
3 和 30 。交换 30 中的数位 3 和 0 ,得到 3 。
12 和 21 。交换12 中的数位 1 和 2 ,得到 21 。
示例 2:
输入:nums = [1,1,1,1,1]
输出:10
解释:
数组中的任意两个元素都是近似相等的。
示例 3:
输入:nums = [123,231]
输出:0
解释:
我们无法通过交换 123 或者 231 中的两个数位得到另一个数。
提示:
2 <= nums.length <= 100
1 < = n u m s [ i ] < = 1 0 6 1 <= nums[i] <= 10^6 1<=nums[i]<=106
2 solution
直接遍历每两个数,看是否满足条件即可
代码
class Solution {
public:
int countPairs(vector<int> &nums) {int cnt = 0;for (int i = 0; i < nums.size(); i++) {for (int j = i + 1; j < nums.size(); j++) {int x = nums[i], y = nums[j];bool flag = true;int d[2], z = 0;for (; x | y; x /= 10, y /= 10) {if (x % 10 != y % 10) {if (z == 0) {d[0] = x % 10;d[1] = y % 10;} else if (z == 1) {if (x % 10 != d[1] || y % 10 != d[0]) {flag = false;break;}} else {flag = false;break;}z++;}}if(flag && z != 1) cnt++;}}return cnt;
}
};