DEV Community

Dumb Down Demistifying Dev
Dumb Down Demistifying Dev

Posted on

Valid Numeric Anagram

Given 2 postive integers, write a function to determine if they have the same number of repeated / non-repeated elements.

Thoughts:

  • Since this question uses numbers instead of string it is possible to employ some JS tricks to get the individual digits
    • we could stringify first and get the character in each position
    • OR we could use mathematical formula to get the same result
  • The mathematical method employs the same trick as in Radix Sort
  • Employ the same mathematical tactic to practice since it is the more difficult solution
  • Stringify method is simpler but is hard to translate over to other languages as a solution
function getNumOfDigits(num) { if (num === 0) return 1; return Math.floor(Math.log10(num)) + 1; } function getDigitByPos(num, pos) { if (num === 0) return 0; return Math.floor(num / Math.pow(10, pos)) % 10; } function ValidNumericAnagram(numX, numY) { if (getNumOfDigits(numX) !== getNumOfDigits(numY)) return false; let digitCounter = {}; let limit = getNumOfDigits(numX); for (let i=0; i<limit; i++) { const digit = getDigitByPos(numX, i); if (digitCounter[digit] === undefined) { digitCounter[digit] = 0 } digitCounter[digit]++; } for (let i=0; i<limit; i++) { const digit = getDigitByPos(numY, i); if (digitCounter[digit] === undefined) { return false; } digitCounter[digit]--; } return true; } 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)