algorithm: check if integer is palindrome (#1177)

* feat: Add check number case

* style: Fix formatting

* fix: Remove number check part

* feat: Create isPalindromeIntegerNumber

* test: Add minus number case
This commit is contained in:
Changi Cho
2022-10-15 18:14:44 +09:00
committed by GitHub
parent 148ebd6625
commit 45f0b7cae6
2 changed files with 65 additions and 0 deletions

View File

@ -0,0 +1,33 @@
/**
* @function isPalindromeIntegerNumber
* @param { Number } x
* @returns {boolean} - input integer is palindrome or not
*
* time complexity : O(log_10(N))
* space complexity : O(1)
*/
export function isPalindromeIntegerNumber (x) {
if (typeof x !== 'number') {
throw new TypeError('Input must be a integer number')
}
// check x is integer
if (!Number.isInteger(x)) {
return false
}
// if it has '-' it cannot be palindrome
if (x < 0) return false
// make x reverse
let reversed = 0
let num = x
while (num > 0) {
const lastDigit = num % 10
reversed = reversed * 10 + lastDigit
num = Math.floor(num / 10)
}
// compare origin x and reversed are same
return x === reversed
}

View File

@ -0,0 +1,32 @@
import { isPalindromeIntegerNumber } from '../isPalindromeIntegerNumber'
describe('isPalindromeIntegerNumber', () => {
it('expects to return true when length of input is 1', () => {
expect(isPalindromeIntegerNumber(6)).toEqual(true)
})
it('expects to return true when input is palindrome', () => {
expect(isPalindromeIntegerNumber(121)).toEqual(true)
expect(isPalindromeIntegerNumber(12321)).toEqual(true)
expect(isPalindromeIntegerNumber(1221)).toEqual(true)
})
it('expects to return false when input is not palindrome', () => {
expect(isPalindromeIntegerNumber(189)).toEqual(false)
})
it('expects to return false when input is minus', () => {
expect(isPalindromeIntegerNumber(-121)).toEqual(false)
expect(isPalindromeIntegerNumber(-12321)).toEqual(false)
})
it('expects to return false when input is not integer number', () => {
expect(isPalindromeIntegerNumber(123.456)).toEqual(false)
})
it('expects to throw error when input is not a number', () => {
expect(() => isPalindromeIntegerNumber(undefined)).toThrowError()
expect(() => isPalindromeIntegerNumber({ key: 'val' })).toThrowError()
expect(() => isPalindromeIntegerNumber([])).toThrowError()
})
})