经典算法题:给出一个正整数,需要将数字千分位格式化,输出字符串。

数据结构与算法 · 数字千分位格式化

一、问题示例

示例 1:

  • 输入:3134250234
  • 输出:3,134,250,234

示例 2:

  • 输入:123
  • 输出:123

二、代码演示

  1. 数字千分位格式 数组反转
// 数字千分位格式 数组反转 export function format1(n: number): string { n = Math.floor(n) // 只考虑整数 const s = `${n}` const arr = s.split('').reverse() return arr.reduce((prev, val, index) => { if (index % 3 === 0) { if (prev) { return val + ',' + prev } else { return val } } else { return val + prev } }, '') }
  1. 数字千分位格式化 字符串分析
// 数字千分位格式化 字符串分析 export function format2(n: number):string { n = Math.floor(n) let res = '' const s = n.toString() const len = s.length for (let i = len - 1; i >= 0; i--) { const j = len - i if (j % 3 === 0) { if (i === 0) { res = s[i] + res } else { res = ',' + s[i] + res } } else { res = s[i] + res } } return res }

三、单元测试

// 数字千分位格式化 test import { format1, format2 } from '../thousands-format.ts' describe('数字千分位格式化 数组反转', () => { it('正常情况', () => { const n = 1241475429 const res = format1(n) expect(res).toBe('1,241,475,429') }) it('小于 1000', () => { expect(format1(0)).toBe('0') expect(format1(122)).toBe('122') }) }) describe('数字千分位格式化 字符串分析', () => { it('正常情况', () => { const n = 1241475429 const res = format2(n) expect(res).toBe('1,241,475,429') }) it('小于 1000', () => { expect(format2(0)).toBe('0') expect(format2(122)).toBe('122') }) })

四、算法复杂度

两种方法整体复杂度都是 O(n),但是 方法1 使用数组,转换、操作会影响性能,因此使用 字符串 性能更好。


欢迎访问:天问博客