力扣-阿拉伯?dāng)?shù)字轉(zhuǎn)羅馬數(shù)字

先減到<1000;

對(duì)于 >100, >10, >1 分為三檔,每檔里有4個(gè)“分界點(diǎn)”,針對(duì)每個(gè)分界點(diǎn),循環(huán)減。

三層for循環(huán)??粗鴷r(shí)間復(fù)雜度挺大,但其實(shí)最外層兩個(gè)循環(huán)次數(shù)都是常數(shù);里面的是

O(n)。所以整體時(shí)間復(fù)雜度是O(n)。


一個(gè)通用的寫(xiě)法:

package main

import "fmt"

func l_m12(num int) string? {

? ? var res string

? ? mp := map[int]string{

? ? ? ? 1:"I",

? ? ? ? 5:"V",

? ? ? ? 10:"X",

? ? ? ? 50:"L",

? ? ? ? 100:"C",

? ? ? ? 500:"D",

? ? ? ? 1000:"M",

? ? ? ? 4:"IV",

? ? ? ? 9:"IX",

? ? ? ? 40:"XL",

? ? ? ? 90:"XC",

? ? ? ? 400:"CD",

? ? ? ? 900:"CM",

? ? }

? ? jins :=[][]int{}

? ? jins = append(jins,[]int{1,4,5,9})

? ? jins = append(jins,[]int{10,40,50,90})

? ? jins = append(jins,[]int{100,400,500,900})

? ? for ;;{

? ? ? ? if num<1000{

? ? ? ? ? ? break

? ? ? ? }

? ? ? ? res +="M"

? ? ? ? num-=1000

? ? }

? ? for j:=2;j>=0;j--{

? ? ? ? line:=jins[j]

? ? ? ? for i :=3; i>=0;i--{

? ? ? ? ? ? for ;num>=line[i];{

? ? ? ? ? ? ? ? res += mp[line[i]]

? ? ? ? ? ? ? ? num -= line[i]

? ? ? ? ? ? }

? ? ? ? }

? ? }

? ? return res


}

// I? ? ? ? ? ? 1

// V? ? ? ? ? ? 5

// X? ? ? ? ? ? 10

// L? ? ? ? ? ? 50

// C? ? ? ? ? ? 100

// D? ? ? ? ? ? 500

// M? ? ? ? ? ? 1000

func main(){

? ? fmt.Println(l_m12(1994))

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容