演算法 數字與位數問題

2021-09-22 23:04:45 字數 1615 閱讀 9877

問題a:

1~n整數中,包含位數1的個數。

dp演算法,時間o(log10(n))

假設數字n各個位置上的數組成arr[n],

dp[i] 表示位置i上的1可以出現的次數。

可以加三個輔助陣列加速計算:

sumfront記錄位數i之前數字的代數和。

sumback記錄位數i之後位數的代數和。

base記錄位數i的等級。

對於例子n=21045n2

1045

base

10000

1000

10010

1sumfront02

21210

2104

sumback

1045

454550

**如下:

問題b:

數字從0開始首尾相接拼成長字串,求第n位置上的數字是幾?

例如0123456789101112…中第13位數字是1

模擬做法,時間o(log10(n))

當前位數個數k個,k=1

步驟:1,計算k位數字拼接後的長度l,判斷n是否在內,不在n減去長度l,並k++。

2,當n在k位數拼接之內,則n位置一定是100…0到99…9之間某一位數,n/k大致定位n位置所在的數字,通過n%k進一步判斷位置。

問題c:

陣列中有n個數,把n個數首尾拼接後獲得最小的數。

貪心做法,時間o(nlogn)

例如,3,32,321,拼接最小數321323

預處理,把所有數字變一樣長,333,322,321,其中,後面缺的數用最後一位補齊,然後排序,將所有數首尾拼接。

問題d:

乙個數二進位制表示中1的個數

public int fun1(int n)

問題e:

陣列中乙個數字出現1次,其他數字出現3次,找出該數字。

統計每個位置上1出現的次數,可以整除3則代表該數字該位置上為0,否則為1。

問題f:

陣列中2個數字出現一次,其他都出現兩次,找出這兩個數字。

所有數字位抑或,結果數字中位置為1的地方表示2個數字位置上乙個為1乙個為0。

抑或所有該位置上為1的數字,則可以找到第乙個數字。

結果數字與第乙個數字抑或,則可以找到第二個數字。

問題g:

位運算做加減乘除: a+1

b+(a

−a+1

b×b)

b\frac + \frac \times b )}

ba+1​+

b(a−

ba+1

​×b)

​ 問題h:

一種字串和數字對應關係,

給定乙個字母表,str=[「a」,「b」,「c」],代表a = 1, b=2,c=3,aa=4,ab=5,ac=6,ba=7…

再給乙個數字k,則對應字串是?

由於字母表有三個字母,則是偽三進製,不同長度三進製數可以表示數字數量為,1,3,9,27,81…

數字k依次減去每個位上的數量,直到不夠減,從而得到數字k由幾個字母組成。

上一步的到剩餘數t,再考查t由幾個1,3,9,27…組成,

加上k之前每個位置都用了一次,得到最終每個位置上的數量。

c演算法 數字加密解密

題目 某個公司採用公用 傳遞資料,資料是四位的整數,在傳遞過程中是加密的,加密規則如下 每位數字都加上5,然後用和除以10的餘數代替該數字,再將第一位和第四位交換,第二位和第三位交換。include void encryptnumber int a void decryptnumber int a ...

演算法 數字遞增的數

2.解決方案 3.資源分享 題目 演算法 數字遞增的數 問題描述 乙個正整數如果任何乙個數字不大於右邊相鄰的數字,則稱為乙個數字遞增的數,例如1135是乙個數字遞增的數,而1024不是乙個數字遞增的數.給定正整數 n,請問在整數 1 至 n 中有多少個數字遞增的數?輸入 輸入的第一行包含乙個整數 n...

訊息摘要演算法 數字摘要

為了保證檔案或值的安全性,因為使用訊息摘要生成的值是不可篡改的 特點 準備工作 string input 訊息摘要 string algorithm md5 public static void main string args throws exception 建立乙個訊息摘要物件messaged...