摘要:比較無(wú)聊的一天,小明決定列舉了一大堆石頭。他先數(shù)了數(shù)石頭,發(fā)現(xiàn)堆里有幾塊石頭,然后到商店去買標(biāo)簽。每一個(gè)標(biāo)簽都是從到的數(shù)字,每一個(gè)石頭都應(yīng)該分配一個(gè)唯一的數(shù)字,從到。所以我們要改進(jìn)一下算法。
比較無(wú)聊的一天,小明決定列舉了一大堆石頭。他先數(shù)了數(shù)石頭,發(fā)現(xiàn)堆里有幾塊石頭,然后到商店去買標(biāo)簽。每一個(gè)標(biāo)簽都是從0到9的數(shù)字,每一個(gè)石頭都應(yīng)該分配一個(gè)唯一的數(shù)字,從1到N。如果每個(gè)標(biāo)簽的成本是1美元,小明會(huì)花多少錢在這個(gè)項(xiàng)目上?
function rocks(int $n): int { return ; }
其中:
$n為石頭數(shù),且$n為大于1的正整數(shù)
返回為需要的成本
例子:
小明發(fā)現(xiàn)了13塊石頭: 則石頭上的數(shù)字為: 1,2,3,4,5,6,7,8,9,10,11,12,13 所需要的標(biāo)簽為: 1,2,3,4,5,6,7,8,9,1,0,1,1,1,2,1,3 所需要的成本為: 17
這道題對(duì)于我們來(lái)講,很多人的固定思路就是以下這種
function rocks(a) { var str = ""; for(var i=1; i<=a; i++){ str += i; } return str.length; } rocks(13);
通過(guò)求長(zhǎng)度的方式來(lái)解決這類問題,但是如果說(shuō)數(shù)據(jù)量一大,就會(huì)造成溢出。所以我們要改進(jìn)一下算法。
以下是我對(duì)這道題的理解:
通過(guò)題意得知,如果是1位數(shù)的,就是1張標(biāo)簽,如果是兩位數(shù)的就是兩個(gè)標(biāo)簽,如果是三位數(shù)的就是三個(gè)標(biāo)簽。
我們只需要循環(huán)他所傳遞的長(zhǎng)度的次數(shù)就可以了,通過(guò),等差數(shù)列的方式,求出次數(shù),
比如:
1位數(shù): 10-1 * 1
2位數(shù): 1010 - 101 * 2
3位數(shù): 101010 - 10 10 2
以下是我的代碼:
function rocks(int $n): int { // 得到長(zhǎng)度. $length = strlen($n); $count = 0; if($length > 1){ // 循環(huán)長(zhǎng)度-1次. 這里求的是位數(shù) for($i=1;$i<$length;++$i){ $count += $i * (pow(10,$i)-pow(10,$i-1)); } // 如果到了 最后一次即到了 10的i次方 直接用n來(lái)減去即可 $count += ($n - pow(10,$i-1) + 1)*$i; return $count; }else{ return $n; } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/38683.html
摘要:比較無(wú)聊的一天,小明決定列舉了一大堆石頭。他先數(shù)了數(shù)石頭,發(fā)現(xiàn)堆里有幾塊石頭,然后到商店去買標(biāo)簽。每一個(gè)標(biāo)簽都是從到的數(shù)字,每一個(gè)石頭都應(yīng)該分配一個(gè)唯一的數(shù)字,從到。所以我們要改進(jìn)一下算法。 比較無(wú)聊的一天,小明決定列舉了一大堆石頭。他先數(shù)了數(shù)石頭,發(fā)現(xiàn)堆里有幾塊石頭,然后到商店去買標(biāo)簽。每一個(gè)標(biāo)簽都是從0到9的數(shù)字,每一個(gè)石頭都應(yīng)該分配一個(gè)唯一的數(shù)字,從1到N。如果每個(gè)標(biāo)簽的成本是1...
摘要:比較無(wú)聊的一天,小明決定列舉了一大堆石頭。他先數(shù)了數(shù)石頭,發(fā)現(xiàn)堆里有幾塊石頭,然后到商店去買標(biāo)簽。每一個(gè)標(biāo)簽都是從到的數(shù)字,每一個(gè)石頭都應(yīng)該分配一個(gè)唯一的數(shù)字,從到。所以我們要改進(jìn)一下算法。 比較無(wú)聊的一天,小明決定列舉了一大堆石頭。他先數(shù)了數(shù)石頭,發(fā)現(xiàn)堆里有幾塊石頭,然后到商店去買標(biāo)簽。每一個(gè)標(biāo)簽都是從0到9的數(shù)字,每一個(gè)石頭都應(yīng)該分配一個(gè)唯一的數(shù)字,從1到N。如果每個(gè)標(biāo)簽的成本是1...
摘要:比較無(wú)聊的一天,小明決定列舉了一大堆石頭。他先數(shù)了數(shù)石頭,發(fā)現(xiàn)堆里有幾塊石頭,然后到商店去買標(biāo)簽。每一個(gè)標(biāo)簽都是從到的數(shù)字,每一個(gè)石頭都應(yīng)該分配一個(gè)唯一的數(shù)字,從到。所以我們要改進(jìn)一下算法。 比較無(wú)聊的一天,小明決定列舉了一大堆石頭。他先數(shù)了數(shù)石頭,發(fā)現(xiàn)堆里有幾塊石頭,然后到商店去買標(biāo)簽。每一個(gè)標(biāo)簽都是從0到9的數(shù)字,每一個(gè)石頭都應(yīng)該分配一個(gè)唯一的數(shù)字,從1到N。如果每個(gè)標(biāo)簽的成本是1...
摘要:,文本節(jié)點(diǎn)的比較,需要修改,則會(huì)調(diào)用。,新節(jié)點(diǎn)沒有子節(jié)點(diǎn),老節(jié)點(diǎn)有子節(jié)點(diǎn),直接刪除老節(jié)點(diǎn)。所以一句話,的作用主要是為了高效的更新虛擬。 20190125 Vue中的diff算法? 概念: diff算法是一種優(yōu)化手段,將前后兩個(gè)模塊進(jìn)行差異對(duì)比,修補(bǔ)(更新)差異的過(guò)程叫做patch(打補(bǔ)丁) 為什么vue,react這些框架中都會(huì)有diff算法呢? 我們都知道渲染真實(shí)dom的開銷是很大的...
摘要:不過(guò)可能還沒有抓到動(dòng)態(tài)規(guī)劃的真諦,總覺得哪里需要再校正下思路。這題也是動(dòng)態(tài)規(guī)劃的題目,目標(biāo)總是要分解為子問題??偨Y(jié)看算法圖解的時(shí)候,涉及動(dòng)態(tài)規(guī)劃的小結(jié)中有這樣的每種動(dòng)態(tài)規(guī)劃解決方案都涉及網(wǎng)格。 寫在前面的話 感覺做題越多遇到的寫法越多,有種躍躍欲試的感覺~ 認(rèn)真做題 第一題 70. 爬樓梯難度:簡(jiǎn)單假設(shè)你正在爬樓梯。需要 n 階你才能到達(dá)樓頂。每次你可以爬 1 或 2 個(gè)臺(tái)階。你有多少...
閱讀 1495·2021-09-23 11:21
閱讀 3171·2019-08-30 14:14
閱讀 3249·2019-08-30 13:56
閱讀 4261·2019-08-30 11:20
閱讀 2019·2019-08-29 17:23
閱讀 2836·2019-08-29 16:14
閱讀 1761·2019-08-28 18:18
閱讀 1543·2019-08-26 12:14