摘要:前言的強(qiáng)整數(shù)給定兩個(gè)非負(fù)整數(shù)和,如果某一整數(shù)等于,其中整數(shù)且,那么我們認(rèn)為該整數(shù)是一個(gè)強(qiáng)整數(shù)。返回值小于或等于的所有強(qiáng)整數(shù)組成的列表。
前言
Weekly Contest 118的 強(qiáng)整數(shù):
解題思路給定兩個(gè)非負(fù)整數(shù) x 和 y,如果某一整數(shù)等于 x^i + y^j,其中整數(shù) i >= 0 且 j >= 0,那么我們認(rèn)為該整數(shù)是一個(gè)強(qiáng)整數(shù)。
返回值小于或等于 bound 的所有強(qiáng)整數(shù)組成的列表。
你可以按任何順序返回答案。在你的回答中,每個(gè)值最多出現(xiàn)一次。
示例1:
輸入:x = 2, y = 3, bound = 10 輸出:[2,3,4,5,7,9,10] 解釋: 2 = 2^0 + 3^0 3 = 2^1 + 3^0 4 = 2^0 + 3^1 5 = 2^1 + 3^1 7 = 2^2 + 3^1 9 = 2^3 + 3^0 10 = 2^0 + 3^2示例2:
輸入:x = 3, y = 5, bound = 15 輸出:[2,4,6,8,10,14]提示:
1 <= x <= 100
1 <= y <= 100
0 <= bound <= 10^6
本題只需要找出正整數(shù)中滿足x^i + y^j且<=bound的數(shù)即可,所以只需要用兩重for循環(huán)找出滿足條件的數(shù)字即可。
注意事項(xiàng):
循環(huán)中會(huì)出現(xiàn)重復(fù)的值,例如
輸入:x = 2, y = 3, bound = 10 輸出:[2,3,4,5,7,9,10] 解釋: 2 = 2^0 + 3^0 3 = 2^1 + 3^0 4 = 2^0 + 3^1 5 = 2^1 + 3^1 5 = 2^2 + 3^0 7 = 2^2 + 3^1 9 = 2^3 + 3^0 10 = 2^0 + 3^2
其中重復(fù)的情況為
5 = 2^1 + 3^1 5 = 2^2 + 3^0
可以選擇先使用Set進(jìn)行結(jié)果去重
執(zhí)行超時(shí)的情況,例如輸入:x = 1, y = 3, bound = 100。所以可以選擇循環(huán)次數(shù)為bound(x^bound>bound恒成立),而不是Integer.MAX_VALUE。
實(shí)現(xiàn)代碼/** * 970. 強(qiáng)整數(shù) * @param x * @param y * @param bound * @return */ public ListpowerfulIntegers(int x, int y, int bound) { //選擇使用Set是因?yàn)榻Y(jié)果中會(huì)出現(xiàn)重復(fù)值 Set set = new HashSet<>(); //循環(huán)次數(shù)為bound,而不是Integer.MAX_VALUE,防止執(zhí)行超時(shí) for (int i = 0; i < bound; i++) { int tmp1 = (int) Math.pow(x, i); //如果第一個(gè)數(shù)就大于bound,直接中斷循環(huán),防止執(zhí)行超時(shí) if (tmp1 > bound) { break; } //循環(huán)次數(shù)為bound,而不是Integer.MAX_VALUE,防止執(zhí)行超時(shí) for (int j = 0; j < bound; j++) { int tmp2 = (int) (Math.pow(y, j)); int tmp = tmp1 + tmp2; //判斷是否超出bound if (tmp <= bound) { set.add(tmp); } else {//超出bound直接中斷循環(huán),因?yàn)楹罄m(xù)的數(shù)字都會(huì)超出bound break; } } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/72831.html
摘要:也稱縮小增量排序,是直接插入排序算法的一種更高效的改進(jìn)版本。希爾排序是非穩(wěn)定排序算法。該方法因於年提出而得名。 前言 因?yàn)楸容^隨心所欲,所以我不按難度分享算法,所以你們會(huì)看到有時(shí)候順序有變化,因?yàn)槲野l(fā)表的時(shí)候會(huì)按照難度修改下位置,盡量讓你們看的時(shí)候能從簡(jiǎn)單開始,以后每次更新都加個(gè)更新時(shí)間好了,讓你們知道我進(jìn)度.新增計(jì)時(shí)函數(shù)直觀對(duì)比效率并且因?yàn)橘Y料比較雜,很多都是我個(gè)人理解說(shuō)法,如果有發(fā)...
摘要:表示正數(shù),表示負(fù)數(shù)。是一個(gè)無(wú)符號(hào)整數(shù),因?yàn)殚L(zhǎng)度是位,取值范圍是。浮點(diǎn)數(shù)具體數(shù)值的實(shí)際表示。例如對(duì)于單精度浮點(diǎn)數(shù),指數(shù)部分實(shí)際最小值是,對(duì)應(yīng)的尾數(shù)部分從一直到,相鄰兩小浮點(diǎn)數(shù)之間的距離都是而與最近的浮點(diǎn)數(shù)即最小的非規(guī)約數(shù)也是。 二進(jìn)制表示小數(shù) 例如用二進(jìn)制表示 0.8125 0.8125 0.8125*2 = 1.625 取整為 1 0.625*2=1.25 取整為 1 0.25*2=0...
摘要:的數(shù)字類型是基于標(biāo)準(zhǔn)實(shí)現(xiàn)的,該標(biāo)準(zhǔn)也被稱為浮點(diǎn)數(shù)使用的是雙精度即位進(jìn)制由于數(shù)字值可以使用對(duì)象進(jìn)行封裝,因此數(shù)字值可以調(diào)用中的方法。 數(shù)組 和其他語(yǔ)言不同,在JavaScript中,數(shù)組可以擁有不同值類型,可以使字符串,數(shù)字,對(duì)象,還可以是數(shù)組(多維數(shù)組就是這樣形成的). 聲明數(shù)組后,可以直接通過(guò)索引的方式進(jìn)行賦值: var arr = []; arr.length; //0 ...
摘要:不允許隱式轉(zhuǎn)換的是強(qiáng)類型,允許隱式轉(zhuǎn)換的是弱類型。拿一段代碼舉例在使用調(diào)用函數(shù)的時(shí)候會(huì)先生成一個(gè)類模板運(yùn)行時(shí)生成,執(zhí)行的時(shí)候會(huì)生成類模板,執(zhí)行的時(shí)候會(huì)生成類模板。 0 x 01 引言 今天和一個(gè)朋友討論 C++ 是強(qiáng)類型還是弱類型的時(shí)候,他告訴我 C++ 是強(qiáng)類型的,他和我說(shuō)因?yàn)?C++ 在寫的時(shí)候需要 int,float 等等關(guān)鍵字去定義變量,因此 C++ 是強(qiáng)類型的,我告訴他 C+...
摘要:數(shù)據(jù)類型結(jié)構(gòu)圖基本數(shù)據(jù)類型布爾值數(shù)值類型定點(diǎn)類型字符字節(jié)短整數(shù)整數(shù)長(zhǎng)整數(shù)浮點(diǎn)類型單精度浮點(diǎn)數(shù)雙精度浮點(diǎn)數(shù)引用數(shù)據(jù)類型類或枚舉或接口數(shù)組基本數(shù)據(jù)類型由上圖可知,基本數(shù)據(jù)類型只有種。變量的變量一般有四個(gè)基本屬性變量名數(shù)據(jù)類型儲(chǔ)存單元變量值。 數(shù)據(jù)類型結(jié)構(gòu)圖 基本數(shù)據(jù)類型 布爾值 (true / false) 數(shù)值類型 定點(diǎn)類型 字符 char 字節(jié) byte 短整數(shù) shor...
閱讀 3197·2023-04-26 01:39
閱讀 3351·2023-04-25 18:09
閱讀 1621·2021-10-08 10:05
閱讀 3237·2021-09-22 15:45
閱讀 2784·2019-08-30 15:55
閱讀 2398·2019-08-30 15:54
閱讀 3173·2019-08-30 15:53
閱讀 1331·2019-08-29 12:32