https://leetcode.com/problems/numbers-with-repeated-digits/
给出一个正整数N,返回小于或等于N且具有至少1个重复数字的正整数。
示例1:
输入:20 输出1 说明:带有至少1个重复数字的唯一正数(<= 20)是11。 示例2:
输入:100 输出:10 说明:带有至少1个重复数字的正数(<= 100)为11、22、33、44、55、66、77、88、99和100。 示例3:
输入:1000 输出:262
注意:
1 <= N <= 10 ^ 9
https://leetcode.com/problems/numbers-with-repeated-digits/discuss/256725/JavaPython-Count-the-Number-Without-Repeated-Digit 我发现此解决方案有很多喜欢之处。但是它是用Java / Python编码的。任何人都可以通过类似的逻辑来帮助使用Javascript对其进行编码。 真的很感激...
python解决方案:我不知道set()部分如何工作,如何使用Javascript做到这一点。
def numDupDigitsAtMostN(self,N): L = map(int,str(N + 1)) res,n = 0,len(L)
def A(m, n):
return 1 if n == 0 else A(m, n - 1) * (m - n + 1)
for i in range(1, n): res += 9 * A(9, i - 1)
s = set()
for i, x in enumerate(L):
for y in range(0 if i else 1, x):
if y not in s:
res += A(9 - i, n - i - 1)
if x in s: break
s.add(x)
return N - res
答案 0 :(得分:0)
虽然我无法翻译python,但我认为您需要将整数转换为char数组,因此100将变为[“ 1”,“ 0”,“ 0”],并进行比较从第一个元素(array [0])到最后一个元素,以查看是否有任何字符相同。
这是我做的一个快速函数。.也许它会比python运行慢,但是它应该可以完成工作:
var result = [];
function x(n) {
for (var i = 0; i <= n; i++){
var nStr = i.toString();
var nStrArr = nStr.split('');
if(nStrArr.length > 1){
for(var j = 0; j < nStrArr.length; j++){
var idx = nStrArr.findIndex(x => x === nStrArr[j]);
if(idx >= 0 && idx !== j){
result.push(parseInt(i));
break;
}
}
}
}
console.log(result); //should list all the numbers with at least 1 repeated digit
console.log(result.length); //length of the array
}
x(1000);