LeetCode878. 第 N 個神奇數字(java)
題目
https://leetcode-cn.com/problems/nth-magical-number/description/
思路
這題我首先覺得這個模的數怎麼這麼奇怪,然後查了一下說,這個是int裡最大的質數~那麼肯定和題目無關了。
如果按最簡單的思路就是一個個加上去試的話目測會超時,因為如果N,A,B都取最大值,那就是要加到40000*10^9!!
先從A = 2,B = 3找規律:
以A = 2,B = 3為例,隨著N遞增有 2,3,4(22),6(A,B的最小公倍數),8(24),9(3*3)…
然後(嗯!要有點靈感)就發現 假設最後的值為 res ,此時個數 N = res/A + res/B - res/(A,B的最小公倍數)
那麼當對於一個數k來說它的 個數k 如果小於N,那麼res肯定在它的右邊,否則在它的左邊。這裡我們再用2分的方式逼近res。
當k = N時,我們就命中了想要的那個數了,再對結果進行取模。
程式碼
import java.math.BigDecimal;
class Solution {
public int nthMagicalNumber(int N, int A, int B) {
/**
* 假設最後的值為 res ,此時 N = res/A + res/B - res/(A,B的最小公倍數)
* 以A = 2,B = 3為例,隨著N遞增有 2,3,4(2*2),6(A,B的最小公倍數),8(2*4),9(3*3)...
*/
int g = A*B/gcd(A,B);//最小公倍數 = A*B / 最大公約數
long min = 0;
long max = 40000000000000L;
while(min < max){
long mid = min + ((max - min) / 2);
long temp = mid / A + mid / B - mid / g;
if(temp < N){
min = mid + 1;
}else {
max = mid;
}
}
return (int)(max % 1000000007);
}
public int gcd(int a,int b){
return b == 0 ? a : gcd(b,a%b);
}
}
相關文章
- Nth Digit 第N個數字Git
- 字首和的n個神奇操作
- css如何匹配倒數第n個元素CSS
- Java語言非遞迴求第n個斐波那契數Java遞迴
- CSS 倒數第n個li元素樣式CSS
- L1-050 倒數第N個字串 (15分)字串
- 知識點5:神奇數字(magic number)
- LeetCode 1137第N個斐波那契數LeetCode
- CSS 第N個子元素樣式CSS
- JavaScript 獲取第n個li元素JavaScript
- jQuery查詢第n個li元素jQuery
- 19. 刪除連結串列的倒數第 N 個結點
- Java斐波那契數列的第n項(從0開始,第0項為0,第1項是1)。Java
- 獲取陣列第N個元素的方法陣列
- CSS設定第n個li元素樣式CSS
- CSS 設定第n個li元素樣式CSS
- 求無序陣列總第n大的數陣列
- 指標-n個數的排序指標排序
- 對N個數進行排序排序
- LeetCode 連結串列專題 19 刪除倒數第n個數 java 遞迴解法 幾乎雙百 思路簡單LeetCodeJava遞迴
- Leetcode No.19 刪除連結串列的倒數第N個節點LeetCode
- LeetCode- 19 刪除連結串列的倒數第N個節點LeetCode
- jQuery在元素集合中獲取第N個元素jQuery
- 查詢數N二進位制中1的個數(JS版 和 Java版)JSJava
- 讀入一個自然數n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。
- 斐波那契數列的第N項(1≤n≤10^18 矩陣快速冪)矩陣
- 《Cracking the Coding Interview程式設計師面試金典》----從0到n中某個數字的個數View程式設計師面試
- 菲波那契數——根據輸入資料中的n,輸出第n項菲波那契數
- 【JAVA習題六】輸入兩個正整數m和n,求其最大公約數Java
- 【Java】——猜數字遊戲Java遊戲
- 有一組整數資料,全部除以一個整數a,使得餘數是同n種數字,如何計算出這個整數a的全部可能。
- [LeetCode] Remove Nth Node From End of List 移除連結串列倒數第N個節點LeetCodeREM
- L1-009 N個數求和
- 3070 n個整數“打擂臺”
- CSS 設定從第n個開始li元素樣式CSS
- jquery獲取指定li元素後面的第n個li元素jQuery
- Java 獲取Word字數Java
- Java吸血鬼數字Java