【数据结构与算法】(17):数字千分位格式化


字数:463 阅读时长:2分钟 阅读:85

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

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

一、问题示例

示例 1:

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

示例 2:

  • 输入:123
  • 输出:123

二、代码演示

  1. 数字千分位格式 数组反转
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 数字千分位格式 数组反转

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. 数字千分位格式化 字符串分析
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 数字千分位格式化 字符串分析

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
}

三、单元测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// 数字千分位格式化 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 使用数组,转换、操作会影响性能,因此使用 字符串 性能更好。


欢迎访问:天问博客

本文作者: Tiven
发布时间: 2023-07-25
最后更新: 2023-08-01
本文标题: 【数据结构与算法】(17):数字千分位格式化
本文链接: https://www.tiven.cn/p/7e9df529/
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
欢迎留言,提问 ^_^
个人邮箱: tw.email@qq.com
notification icon
博客有更新,将会发送通知给您!