给你一个字符串 num
和一个整数 k
。其中,num
表示一个很大的整数,字符串中的每个字符依次对应整数上的各个 数位 。
你可以交换这个整数相邻数位的数字 最多 k
次。
请你返回你能得到的最小整数,并以字符串形式返回。
示例 1:
输入:num = "4321", k = 4 输出:"1342" 解释:4321 通过 4 次交换相邻数位得到最小整数的步骤如上图所示。
示例 2:
输入:num = "100", k = 1 输出:"010" 解释:输出可以包含前导 0 ,但输入保证不会有前导 0 。
示例 3:
输入:num = "36789", k = 1000 输出:"36789" 解释:不需要做任何交换。
示例 4:
输入:num = "22", k = 22 输出:"22"
示例 5:
输入:num = "9438957234785635408", k = 23 输出:"0345989723478563548"
提示:
1 <= num.length <= 30000
num
只包含 数字 且不含有 前导 0 。1 <= k <= 10^9
class Solution {
public:
string minInteger(string num, int k) {
vector b(num.length(), false); //标记是否移动过
char mins = 'a'; //选择最小的元素
int loc = num.length();
string res; //结果
while (k > 0)
{
int j = 0, i = 0;
//查询k步之内,没有移动过,且最小的元素的索引
while (j <= k && i < (int)num.length())
{
if (!b[i])
{
j++;
if (mins > num[i])
{
mins = num[i];
loc = i;
}
}
i++;
}
//还有k步数可以移动,但是所有的元素已经移动过,此时串已经是最小串
if (j == 0)
break;
j = i = 0;
//最小元素的位置与起始位置之间已经移动过的元素个数
while (j < loc)
{
if (b[j])
i++;
j++;
}
//更新剩下的K步数
k -= (loc - i);
//将最新移动的元素添加到结果中
res += num[loc];
mins = 'a';
//标记元素已经被移动过
b[loc] = true;
}
//将剩下的串添加到结果中
for (int i = 0; i < (int)num.length(); i++)
{
if (!b[i])
res += num[i];
}
return res;
}
核心思想:将K步之内最小的元素移动到字符串的首位,移动后K减去移动的步数,剩下的K步继续重复。但是测试用例超时
测试用例:
("858715992185538904922674665946345178173584587361975190264759227358679074804875994637280\
367990135203927661034806043533309365921316441656325979456369531572321598878694194182907828012745293613811628582178045504327\
82516742073440109472526699970339886609800750383366078717238316760191501394481258890170341126991012586888137717338667553546709\
19464603331009130673517018967286442224933538000556598786871094729818211108035823784670843666737560561677998185623241899188420717\
9859396477430613557474508551699606985153924390138419029473446286426726017641421072641969597293006832974786082871485145774275039\
46680178019959065693388998926550132805605940680158877806933742224833657753377765719063845159688620618163690515778286975\
83717093191871719107436409806388862591591446154293105116643776770596077548744517274149480455121660686197388707434701083\
10167018744498483555035026535032139864586114720966844095135467371922885416211073136058113207350459025428564811413407723\
603169950563158313644056104787218027417635760179704970207272095831605421428737813368130711492640952800004270138301253162\
589800937000165991394379339586443233298955651898868972784804827461748274341802042658694531261337565610540912304067834282872\
115324428237172484867118385263043572202392325130937274597310937871023045172013847485111357768276199441858138941694462046087\
344590489032758591101395876469586434958978837283681266970801783200979056641387215001550008319627069498692669381624688586705\
600454533061026567374258339076100663482495581102111851755792702619461685409089500038766553774841701418849591588578400453841\
494321313355967293245164490896114597934069524179603618963997560050229709463345505610324524931697016496317915813002042208900\
5633856984400918495987026555192743841350212568034394857863449170329411112539331754105898966985608108594544339511274847221613\
5599382582233735964569253187813981873688780227977667018427010297239956850769028582721224112262956046971514044786426348254427\
62410102714507410007938848721096811473538454870547911867332460498153010617477336965207019199481101410983043362700139634762523\
640931920310984530109892509979191145309540742801706588329548623673793070460761610890236335673235919416114325588725005428996065\
87168843291771551295498288386761340402063183121785126243287589600603047476630098635987829062299014187518820368245267647940806\
17124802459394045083227998207434243429707655795304432942726834631965138520142894332446608475962483625260976756694829445970049\
298654319044024630745005098268850672124565530562827070074796458676730375171314682470766724868623183901898360946868868536335809\
340731068223385198510770463119676693819847635537280007285371652586968066801532471865879431469697716283275838478391294217884994\
494226458270052631853580709651181843328163861751730163120543142543110773515519216305521314950037582148851997105197736298017086\
953052836208337380578019029273417318321019851693400798205857797557321290393386265588376035302686550556224862524242573344787722\
426523276261868733279114435906019900729192551809546307590113480238099405787216065689011000102306220055764089865169357216871734\
585907019260943866866461090185600692755197455219174515673895120083989168899824133366193745175725932211785527787053415431214770\
221196371166982439617260815327366467918955559947498705538959949283333156952013971174393460965203572691266450603704322143699379\
085687160149545133276623033956201490670668125039339075225312427242591504731030461908584823167472590159209564206153320756458243\
3808984145539746816202362635062077799321848214902657714184646293929980663410539534328194421200372665621295071108299400999550699\
284226954312232677522535519065217570828476138395632199304618660030419159054508328621288307271780753624866784121450132407693681\
605901377944388340526836583144685933046484936303298116519668360710186258315507621342800996695162782091957075299681849730444144\
992807544219784162873231849662545240300980177103892951048813231368941096674488716956212991003046940638438988947756902816017000\
852085990313385043168438642967065517261172950335140545654447807604147678664082194746358085849658584470802078124035714424666123\
593954630251665226929516886687039157933893138658442317946300867935223380545406980404598793636138010613900926061151810637842551\
890927730085821642458647499490596744507508516249010709967706249684599400128467019868506619087140631881309788201317182402760708\
7435132128828821732916340944039000016136544931697732377238966615863424568449916502036729360142966211489592934591963388806608876\
8867971020047968455478575496837148722504919657414312496429386157047572816352197985768962537500321148355306897978400022767945149\
008156175506676055522079469108526792105280460425939709198105284935481329530418447347968018901751519754278263826382788478907356\
566139611864626813870511716539399814089447637863820760209091216185465909823010886440617432444485719029064707237211254996453680\
123144103677763795092646862237195734822323040876250804573802836673655628572091067239162220551836037922591469995302574431197011\
319133385344821451065851773534884155926552443889267034831902822010711078300083000059691668550331995703629187223522949870066540\
589792968452541426992184701737704863131769499472196672805142065024003414564070717536149664262972292660238690663451745769823504\
581250664749821839214014628049017901551715282505305924545562433507799725071426144117542619308627840150884154219904703860435957\
5824853768459483747845943452292095519446728964300344610127174732098174241268100998538708260347701832430452375584886631904461357\
2553032725825672248315294972028552848062097827528007723330783883815914362900188235505577152686386223452514236687379191418232119\
6386020656650050460410863035319884421985485173005496585571681185974484138363198472419785519114919703852085996575761464286613984\
2808356328158990371194499215094244818517449716035132703970511993970806511983110208079044790006512028092683229897469462341851415\
3808441759915258811026721351342722318145644583157213121193563444135416013111208727890601422559122920480715642672165177974262051\
3449225000627938041910597566757776094649490985338754920744760047222473475097052315574780694850471713479975212327774447341847183\
494957309423263689396123981806435718512710234949962292062492009692867109799013699877007115195748463282240728806563727371130813361\
795120700619869826032111467036930919312061372216370877402587880877783592463654662503003432622296883889362924436552452980364289865\
492776248895714004335674876184657642287255898988660249362389491259427407505644685733792624114660017733415598866751950254188935716\
0339627762433332000877152044154109409985630846953424260000919408933230168072286184387879881383561564287441954606438417372335200632\
893493037413064651570617167585403639665880521929837634920492430035718724978924896956230284969728013063160977332752746343168147505\
973597744654533531423130515098924827563047983994152416373478691641067742515253695222392694428968470130469005866733836517007738700\
3143438157647214635074356766880313977648963092785584467305122516961118993332327365997296595682914126561570171044997706675135398341\
15168648038972846863497539499050619643973806522587634809542469970933696945353836306695453836093688548035713166682686944447356452833\
97308514567949317092203875456163943534074391184238045529142178247735037186446047607070218765608270346414513985673229433218659532732\
03335756200933015345183315735307391353874621930110560453684650176237758072046330565436399866262760754441808789016373149730089315005\
851782025156053446058238601663457304765782782338595133701612139646771687978582478350932427643469490923522542174941782241425828404159\
411866967768495539298686211507160543509356299765986253290218980988716827692163675326239174717934116405384925190417669577263478600696\
521038129036023090820677536213557139562250440287849654033318902863037756368427253784897277196562409669451188319894612688467967588349\
45966727825509543495748099126834517035737444111904791114999578916840678923185905591791460177371499185049638382382424717463342802788643\
01182536099971145589840781178020207116157247271011999582918059938557501831385677329235484351383704665959928883383508384270540693443213\
62547645454958037612771815128535176219633053148555700668726999569939163429112593918375588354268139537130315042042557468204535877547161\
24900843975190275045109884525709968752578838307725620076624221079764324938046691489600672881511636504858326489308862584344570188139595\
25002109788483367912490131085945860127773885234179711696981055148650924314948686381836649760764935938698009100293050834121387889182567\
03778236899291828398592608818304755839396622105720611322967130006508484351222104084224563990082300835114169292255803104716744002908387\
36933606743149121746662879183859883482774483209093097171253757856149158302804177219338722743002413500826766497411623743721802472719832\
08068631530013860570165422045061727833598654184629208309488938767821049777687666865472974265780229768368695942964238302272567070157799\
36586885221873851980550625748883585329893591299690620908705442318638449439881496981143336950226198638014929838566746791475907543813396\
40652816340621669280726753557776196954171720366971341729626466957458301933865784824777233193291372598691993313451766309376337032632497\
70361226851535805719265600785038403730770716385494792977569765511617714477996186461175939176676672371378147520",26226098);
输出结果:
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000001111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111222222222222222222222222222222222222222222222222222222222222222222222222222222222
22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
22222222222222222222222222222222222222222222222222222222222222222222222222233333333333333
33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
33333333333333333333333333333333333333333444444444444444444444444444444444444444444444444
44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
44444444444444444444444444444444444444444444444444444444444444444444444455555555555555555
55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
55555555555555555555555555555555555555555555555555555555555555555555555555555555555566666
66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
66666666666666666666666666666666666666666666666666666666666677777777777777777777777777777
77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777
77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777
77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777
77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777
77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777
77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777
77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777
77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777
77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777
77777777777777777777777777777777777777777777777777777777777777777777777777778888888888888
88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
88888888888888888888888888888888888888888888999999999999999999999999999999999999999999999
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999999999999999999999999999999999999999999999999999999
末尾后记:1、我真是个菜鸡;2、神啊,他们怎么那么厉害,我花了一整个白天,还是超时,神却只用了11分钟;3、神啊,接受我的膜拜吧