題目:數字以012345678910111213…序列化,請編寫乙個函式,輸入第n位找到第n位的數字
比如5 輸出5 13輸出1 19輸出4 1001輸出7
思路:窮舉出所有的數字,每窮舉出乙個數字,總長度加上這個數字的長度。如果總長度大於n,那麼需要輸出的數字就在當前數字中
//求出數字所對應的位數
const
getnumw
= n =>
return w;
}const
getnum
= n =>
n++;let i =0;
let w =0;
while
(n > w)
// console.log(i-1,w,n);
let num = math.
floor
((i-1)
/math.
pow(10,
(w-n)))
return num>
9?num%
10:num;
}
思路2:窮舉法解決問題時間複雜度太高了,需要尋找規律來解決問題.
除掉前十個數字以外,兩位數是90個,3位數是270個…n位數是n*9*math.pow(10,n-1)個
所以假設是要求第90位,那麼去掉剛開始10個,為80位,80<90 則為二位數 80/2 === 40餘數0 則為二位數中第41個數的第0位 就是5
const
goodfun
= n =>
if(n<10)
const
getnumww
= w =>
n -=10;
let w =2;
let x =
getnumww
(w);
while
(x < n)
// console.log(`x=$,w=$,n=$`);
return
parseint
((math.
pow(
10,w-1)
+math.
floor
(n/w)).
tostring()
[n%w]
)}
劍指offer c 數字序列中某位數的數字
題目 數字以0123456789101112131415.的格式序列化到乙個字串序列中。這個字串,第5位是5 從0開始計數 第13位是1,第19位是4。請寫出乙個函式,求任意第 位數。解題思路 先確定 的範圍,然後減去前面的範圍,除上位數,同時取餘位數 求出該範圍內的數,在加上之前的範圍真實數,就是...
劍指offer js實現剪繩子
題目 給你一根長度為n的繩子,請剪成m段n 1,m 1,使剩下的繩子乘積為最大值.例 8 2 3 3 18 思路 動態規劃,比如8,第一次切割可以分成8 1種切法,將最優解儲存起來。let n 8 function cut if res n return res n let max 0 for le...
劍指44 數字序列中某一位的數字
題目 數字按照0123456789101112131415161718192021 的順序排列。第5位 從0開始計數 為5,第13位為1,第19位為4 求任意第n位對應的數字。思路 從 0 9的10個數是1位數 10 99是兩位數 100 999是三位數 除了1位數之外 其他n位數 佔據的順序排列的...