位元組 字典序

2021-10-07 03:49:38 字數 2713 閱讀 3827

給定整數n和m, 將1到n的這n個整數按字典序排列之後, 求其中的第m個數

對於n=

11, m=

4, 按字典序排列依次為1,10

,11,2

,3,4

,5,6

,7,8

,9, 因此第4個數是2.

對於n=

200, m=

25, 按字典序排列依次為1

10100

101102

103104

105106

107108

10911

110111

112113

114115

116117

118119

12120

121122

123124

125126

127128

12913

130131

132133

134135

136137

138139

14140

141142

143144

145146

147148

14915

150151

152153

154155

156157

158159

16160

161162

163164

165166

167168

16917

170171

172173

174175

176177

178179

18180

181182

183184

185186

187188

18919

190191

192193

194195

196197

198199220

20021

2223

2425

2627

2829330

3132

3334

3536

3738394

4041

4243

4445

4647

4849550

5152

5354

5556

5758596

6061

6263

6465

6667

6869770

7172

7374

7576

7778798

8081

8283

8485

8687

8889990

9192

9394

9596

9798

99 因此第25個數是120…

輸入僅包含兩個整數n和m。

資料範圍:

對於20

%的資料,

1<= m <= n <=5;

對於80

%的資料,

1<= m <= n <=10^

7; 對於100

%的資料,

1<= m <= n <=10^

18.

輸出僅包括一行, 即所求排列中的第m個數字.

輸入例子1:11

4輸出例子1

:2

同樣這道題不能暴力求解,如果使用額外記憶體暴力排序會發現超出記憶體限制,同樣解決這道題需要另闢捷徑

#include

using

namespace std;

//包括自己的節點數,即字典樹的數字pre分支的所有節點數

//pre分支的深度為1的孩子:pre*10,pre*10+1,pre*10+2,...,pre*10+10-1,

//孩子數為10

//pre分支的深度為2的孩子:pre*100,pre*100+1,pre*100+2,...,pre*100+100-1,

//孩子數為100

long

getcntofpre

(long pre,

long n)

else

}return cnt;

}//該函式是尋找第m個數是什麼,通過節點數進行分支選擇

//如果該分支的節點數較m來說過少,那麼第m的數肯定不在這個分支上,檢測下個分支

//檢測下個分支的時候,不是在這個分支尋找第m的數字,而是尋找第(m-上乙個分支的節點數)的數

//如果分支的節點數較m來說過多, 選擇該分支,如果m為1,那麼答案就是這個分支的根節點

long

solve

(long n,

long m)

//在該分支的孩子分支上,從第一孩子開始尋找

ans *=10

;//ans對應的是乙個字典前序,如10,11,12,13,其字典分支

//為101,102,1001,110,1100,1200,1201,1300,1301,1309,1310等

}else

}return ans;

}int

main()

return0;

}

字典序(位元組跳動2017秋招第3題)

我的心願是世界和平 題目描述 給定整數n和m,將1到n的這n個整數按字典序排列之後,求其中的第m個數。對於n 11,m 4,按字典序排列依次為1,10,11,2,3,4,5,6,7,8,9,因此第4個數是2。輸入描述 輸入僅包含兩個整數n和m。資料範圍 對於20 的資料,1 m n 5 對於80 的...

字典序演算法

字典序排列就是按照字典a z,1 9的順序給出字串的順序全排列,例如abc的全排列就是從abc一直排到cba。那麼給定乙個字串,怎麼找出恰好大於該字串的下乙個排列呢?我們考慮如下的步驟 1 假設字串為p1 p2 pn 我們從後往前尋找第乙個符合pj j 1條件的字元pj 也就是說,p1 p2 pj ...

字典序問題

碰到過很多求關於字典序的問題,一直都是用的c 的stl庫中的函式水過的,今天終於有機會,算是對字串字典序問題的乙個總結吧。如果已知乙個字串 abc 為了更直觀,我們把建立如下對映 a 1 b 2 c 3 我們把這三個字母的所有排列都寫出來,有 序號字串 對映數字 1abc 1232 acb132 3...