【发布时间】:2021-01-04 21:52:18
【问题描述】:
开发一个函数:
如果两个非负整数 N 和 M 的十进制表示可以通过重新排列它们的数字彼此获得,则称它们是相似的。请注意,正确的十进制表示不包含前导零。
Class solution { public int solution(int N); }
给定一个非负整数 N,返回类似于 N 的非负整数的个数。
例如,给定 N =1213,该函数应返回 12,因为有十二个整数类似于 1213,即:1123、1132、1213、1231、1312、1321、2113、2131、2311、3112、3121 和 3211
给定 N = 123,该函数应该返回 6,因为有六个整数类似于 123,即:123、132、213、231、312 和 321
给定 N = 100,函数应该返回 1,因为只有一个相似的整数。 001 和 010 都是不正确的整数十进制表示。
如果 N = 0,函数应该返回 1,因为只有一个相似的整数(数字本身)。
目前,我有一个函数可以创建所有排列,尽管对于 N = 1213,我有 12 个以上。我不知道他们是如何得到这个数字的。
def solution(N):
res = [int(x) for x in str(N)]
result_perms = [[]]
for n in res:
new_perms = []
for perm in result_perms:
for i in range(len(perm)+1):
new_perms.append(perm[:i] + [n] + perm[i:])
result_perms = new_perms
return result_perms
【问题讨论】:
-
什么确切地是“N = 1213 超过 12”?您的解决方案返回的具体整数是什么? “相似”究竟是什么意思? (我可以猜到,但据我所知,这不是一个数学概念,你应该明确。)请阅读How to Ask。