【Java|golang】1814. 统计一个数组中好对子的数目

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

给你一个数组 nums 数组中只包含非负整数。定义 rev(x) 的值为将整数 x 各个数字位反转得到的结果。比方说 rev(123) = 321 rev(120) = 21 。我们称满足下面条件的下标对 (i, j) 是 好的

0 <= i < j < nums.length
nums[i] + rev(nums[j]) == nums[j] + rev(nums[i])
请你返回好下标对的数目。由于结果可能会很大请将结果对 109 + 7 取余 后返回。

示例 1

输入nums = [42,11,1,97]
输出2
解释两个坐标对为

  • (0,3)42 + rev(97) = 42 + 79 = 121, 97 + rev(42) = 97 + 24 = 121 。
  • (1,2)11 + rev(1) = 11 + 1 = 12, 1 + rev(11) = 1 + 11 = 12 。
    示例 2

输入nums = [13,10,35,24,76]
输出4

提示

1 <= nums.length <= 105
0 <= nums[i] <= 109

public int countNicePairs(int[] nums) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int num : nums) {
            int oldNum=num;
            int temp=0;
            while (num>0){
                temp=temp*10+num%10;
                num/=10;
            }
            oldNum-=temp;
            map.put(oldNum,map.getOrDefault(oldNum,0)+1);
        }
        int result=0;
        for (Integer value : map.values()) {
            result+=((long)value*(value-1)/2)%1000000007;
        }
        return result%1000000007;
    }

在这里插入图片描述

func countNicePairs(nums []int) int {
	mapX := make(map[int]int, 0)
	for _, num := range nums {
		temp,oldNum:=0,num
		for num>0{
			temp=temp*10+num%10
			num/=10
		}
		oldNum-=temp
	    mapX[oldNum]++
	}
	result:=0
	for _, v := range mapX {
		result+=int((int64(v)*int64(v-1)/2)%1000000007)
	}
	return result%1000000007
}

在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: goJava