【412】【统计近似相称数对 II】

[复制链接]
发表于 2026-1-31 09:16:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

差130个样例,等佬解
  1. class Solution:
  2.     def ifqual(self,str1,str2):
  3.         return int(str1)==int(str2)
  4.     def change(self,str1,str2):
  5.         str1 = list(str1)
  6.         n=len(str1)
  7.         t=0
  8.         for i in range(n):
  9.             for j in range(i+1,n):
  10.                 str1[i],str1[j]=str1[j],str1[i]
  11.                 t+=1
  12.                 if self.ifqual("".join(str1),str2):
  13.                     return True
  14.                 if t==2:
  15.                     str1[i],str1[j]=str1[j],str1[i]   
  16.         return False
  17.          
  18.     def countPairs(self, nums: List[int]) -> int:
  19.         n=len(nums)
  20.         ret=0
  21.         for i in range(n):
  22.             for j in range(i+1,n):
  23.                 if nums[i]==nums[j]:
  24.                     ret+=1
  25.                 else:
  26.                    num1=str(nums[i])
  27.                    num2=str(nums[j])
  28.                    if self.change(num1,num2) or self.change(num2,num1):
  29.                        ret+=1
  30.         return ret
复制代码
 

大佬题解
  1. class Solution:
  2.     def countPairs(self, nums: List[int]) -> int:
  3.         nums.sort()
  4.         ret=0
  5.         dict=defaultdict(int)
  6.         for num in nums:
  7.             #不交换
  8.             st={num}
  9.             #num的长度
  10.             s=list(str(num))
  11.             m=len(s)
  12.             #数位交换
  13.             for i in range(m):
  14.                 for j in range(i+1,m):
  15.                     s[i],s[j]=s[j],s[i]
  16.                     st.add(int(''.join(s)))
  17.                     for p in range(i+1,m):
  18.                       for q in range(p+1,m):
  19.                         s[p],s[q]=s[q],s[p]
  20.                         st.add(int(''.join(s)))
  21.                         #交换2次
  22.                         s[p],s[q]=s[q],s[p]
  23.                     #换回来
  24.                     s[i],s[j]=s[j],s[i]
  25.             ret+=sum(dict[v] for v in st)
  26.             dict[num]+=1
  27.         return ret         
复制代码

思绪确实好用,2题都能解。
ps:
力扣刷完还能atcoder>codeforces.
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表