From 24f1c43ea5b5d101adffeec17ebd9bab4a674772 Mon Sep 17 00:00:00 2001 From: Ashing Zheng Date: Sun, 25 Feb 2024 23:31:11 +0800 Subject: [PATCH] feat: 1694. Reformat Phone Number (#102) Signed-off-by: ashing --- leetcode/1694/1694. Reformat Phone Number.go | 51 +++++++++++++++++++ .../1694/1694. Reformat Phone Number_test.go | 27 ++++++++++ leetcode/1694/solution1/solution1.go | 21 ++++++++ 3 files changed, 99 insertions(+) create mode 100644 leetcode/1694/1694. Reformat Phone Number.go create mode 100644 leetcode/1694/1694. Reformat Phone Number_test.go create mode 100644 leetcode/1694/solution1/solution1.go diff --git a/leetcode/1694/1694. Reformat Phone Number.go b/leetcode/1694/1694. Reformat Phone Number.go new file mode 100644 index 0000000..350f441 --- /dev/null +++ b/leetcode/1694/1694. Reformat Phone Number.go @@ -0,0 +1,51 @@ +package _694 + +import ( + "bytes" + "strings" +) + +func reformatNumber(number string) string { + number = strings.Replace(number, " ", "", -1) + number = strings.Replace(number, "-", "", -1) + + var res bytes.Buffer + + if len(number)%3 == 1 { // 最后是 xx-xx + for i := 0; i < len(number)-4; i++ { + if i%3 == 0 && i != 0 { + res.WriteByte('-') + } + res.WriteByte(number[i]) + } + if len(res.String()) > 0 { + res.WriteByte('-') + } + res.WriteString(number[len(number)-4 : len(number)-2]) + res.WriteByte('-') + res.WriteString(number[len(number)-2:]) + return res.String() + } + if len(number)%3 == 2 { // 最后是 xx + for i := 0; i < len(number)-2; i++ { + if i%3 == 0 && i != 0 { + res.WriteByte('-') + } + res.WriteByte(number[i]) + } + if len(res.String()) > 0 { + res.WriteByte('-') + } + res.WriteString(number[len(number)-2:]) + return res.String() + } + + for i := 0; i < len(number); i++ { + if i%3 == 0 && i != 0 { + res.WriteByte('-') + } + res.WriteByte(number[i]) + } + + return res.String() +} diff --git a/leetcode/1694/1694. Reformat Phone Number_test.go b/leetcode/1694/1694. Reformat Phone Number_test.go new file mode 100644 index 0000000..d274c9f --- /dev/null +++ b/leetcode/1694/1694. Reformat Phone Number_test.go @@ -0,0 +1,27 @@ +package _694 + +import "testing" + +func Test_reformatNumber(t *testing.T) { + type args struct { + number string + } + tests := []struct { + name string + args args + want string + }{ + { + name: "one", + args: args{number: "1-23-45 6"}, + want: "123-456", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := reformatNumber(tt.args.number); got != tt.want { + t.Errorf("reformatNumber() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/leetcode/1694/solution1/solution1.go b/leetcode/1694/solution1/solution1.go new file mode 100644 index 0000000..1bc510e --- /dev/null +++ b/leetcode/1694/solution1/solution1.go @@ -0,0 +1,21 @@ +package solution1 + +import "strings" + +func reformatNumber(number string) string { + number = strings.ReplaceAll(strings.ReplaceAll(number, "-", ""), " ", "") + var format func(sub string) string + format = func(sub string) string { + if len(sub) == 2 { + return sub + } + if len(sub) == 3 { + return sub + } + if len(sub) == 4 { + return sub[:2] + "-" + sub[2:] + } + return sub[:3] + "-" + format(sub[3:]) + } + return format(number) +}