mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-05 00:01:37 +08:00
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:
33
Maths/isPalindromeIntegerNumber.js
Normal file
33
Maths/isPalindromeIntegerNumber.js
Normal 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
|
||||
}
|
32
Maths/test/isPalindromeIntegerNumber.test.js
Normal file
32
Maths/test/isPalindromeIntegerNumber.test.js
Normal 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()
|
||||
})
|
||||
})
|
Reference in New Issue
Block a user