两个整数Javascript之间的相同数字集合

时间:2017-02-01 18:07:48

标签: javascript regex numbers

我正在尝试检查两个整数是否包含相同的数字集合。

equivalent(123, 321) // -> true
equivalent(413, 1453) // -> false
equivalent(2002, 2200) // -> true
equivalent(542, 545) // -> false

我开始使用以下功能:

function equivalent(a,b) {
    let stringA = a.toString().match(/[1-9]/g);
    let stringB = b.toString().match(/[1-9]/g);
}

我不知道是否使用哈希映射来映射每个数字的出现并递增,但是我无法检查两个对象是否彼此相等。

哪种方法最优化(在空间/时间复杂度方面)以及哪种方法最容易读取或两者兼而有之?感谢。

编辑:抱歉没有详细说明我的问题。我想检查两个整数是否包含相同的数字和相同数量的数字。

3 个答案:

答案 0 :(得分:2)

使用一个简单的循环并使用String#replace从第二个字符串中删除每个字符,然后检查第二个字符串是否为空(空意味着两个字符包含相同的数字)。

console.log(
  equivalent(123, 321), // -> true
  equivalent(413, 1453), // -> false
  equivalent(2002, 2200) // -> true
);

function equivalent(a, b) {
  // convert into string
  a = a.toString();
  b = b.toString();
  // iterate over each character
  for (var i = 0; i < a.length; i++)
  // replace each character from second string
    b = b.replace(a[i], '');
  // finally check second string is empty 
  return b == '';
}

答案 1 :(得分:1)

您可以对数字进行排序并比较连接的字符串。

&#13;
&#13;
function equivalent(a, b) {
    return [...a.toString()].sort().join('') === [...b.toString()].sort().join('');
}

console.log(equivalent(123, 321));
console.log(equivalent(413, 1453));
console.log(equivalent(2002, 2200));
&#13;
&#13;
&#13;

使用哈希表

&#13;
&#13;
function equivalent(a, b) {
    var hash = Object.create(null);        
    [...a.toString()].forEach(a => hash[a] = (hash[a] || 0) + 1);
    [...b.toString()].forEach(b => hash[b] = (hash[b] || 0) - 1);
    return Object.keys(hash).every(k => !hash[k]);
}

console.log(equivalent(123, 321));
console.log(equivalent(413, 1453));
console.log(equivalent(2002, 2200));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

转换为字符串,拆分,排序,组合并比较。

&#13;
&#13;
function equivalent(a, b) {
  return a.toString().split("").sort().join("") === b.toString().split("").sort().join("");
}

console.log(equivalent(123, 321));
console.log(equivalent(413, 1453));
console.log(equivalent(2002, 2200));
&#13;
&#13;
&#13;

可以添加长度检查,以便不需要进行其他处理。