Java?C++題解leetcode902最大為N的數(shù)字組合數(shù)位DP
題目要求


閱讀理解

思路:數(shù)位DP

Java
class Solution {
public int atMostNGivenDigitSet(String[] digits, int n) {
// 轉(zhuǎn)存digits
int[] nums = new int[digits.length];
for (int i = 0; i < digits.length; i++)
nums[i] = Integer.parseInt(digits[i]);
// 轉(zhuǎn)存n
List<Integer> list = new ArrayList<>();
while (n != 0) {
list.add(n % 10);
n /= 10;
}
int len = list.size(), m = nums.length, res = 0;
// 目標(biāo)數(shù)位數(shù) = len
for (int i = len - 1, p = 1; i >= 0; i--, p++) {
int cur = list.get(i);
int l = 0, r = m - 1;
while (l < r) { // 二分找合適的digits[r]
int mid = l + r + 1 >> 1;
if (nums[mid] <= cur)
l = mid;
else
r = mid - 1;
}
// 是否繼續(xù)向后
if (nums[r] > cur)
break;
else if (nums[r] == cur) {
res += r * (int)Math.pow(m, (len - p));
if (i == 0) // 構(gòu)造至最后一位
res++; // 加上nums[r]做該位的可能
}
else if (nums[r] < cur) {
res += (r + 1) * (int)Math.pow(m, (len - p));
break;
}
}
// 目標(biāo)數(shù)位數(shù) < len
for (int i = len - 1; i > 0; i--)
res += Math.pow(m, i);
return res;
}
}
- 時(shí)間復(fù)雜度:O(log?n),由于二分最大范圍是1∼91可忽略,所以整體復(fù)雜度僅與n的位數(shù)有關(guān)
- 空間復(fù)雜度:O(C),轉(zhuǎn)存給出數(shù)據(jù)
C++
class Solution {
public:
int atMostNGivenDigitSet(vector<string>& digits, int n) {
// 轉(zhuǎn)存digits
vector<int> nums;
for (int i = 0; i < digits.size(); i++)
nums.emplace_back(stoi(digits[i]));
// 轉(zhuǎn)存n
vector<int> list;
while (n != 0) {
list.emplace_back(n % 10);
n /= 10;
}
int len = list.size(), m = nums.size(), res = 0;
// 目標(biāo)數(shù)位數(shù) = len
for (int i = len - 1, p = 1; i >= 0; i--, p++) {
int cur = list[i];
int l = 0, r = m - 1;
while (l < r) { // 二分找合適的digits[r]
int mid = l + r + 1 >> 1;
if (nums[mid] <= cur)
l = mid;
else
r = mid - 1;
}
// 是否繼續(xù)向后
if (nums[r] > cur)
break;
else if (nums[r] == cur) {
res += r * (int)pow(m, (len - p));
if (i == 0) // 構(gòu)造至最后一位
res++; // 加上nums[r]做該位的可能
}
else if (nums[r] < cur) {
res += (r + 1) * (int)pow(m, (len - p));
break;
}
}
// 目標(biāo)數(shù)位數(shù) < len
for (int i = len - 1; i > 0; i--)
res += pow(m, i);
return res;
}
};
- 時(shí)間復(fù)雜度:O(log?n),由于二分最大范圍是1∼91可忽略,所以整體復(fù)雜度僅與n的位數(shù)有關(guān)
- 空間復(fù)雜度:O(C),轉(zhuǎn)存給出數(shù)據(jù)
總結(jié)
持續(xù)偷懶之不想寫(xiě)Rust,看到那一堆容器就知道肯定搞不出來(lái)來(lái)回借用克??;
get了數(shù)位DP的方法,還是很簡(jiǎn)單的;
由本題其實(shí)可以推廣到計(jì)算任意區(qū)間內(nèi)的合法數(shù)字?jǐn)?shù)量
因?yàn)槿莩庠硭灾苯觬es in [l,r]=dp(r)−dp(l)
以上就是Java C++題解leetcode902最大為N的數(shù)字組合數(shù)位DP的詳細(xì)內(nèi)容,更多關(guān)于Java C++ 最大為N的數(shù)字組合數(shù)位DP的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Springboot+WebSocket實(shí)現(xiàn)一對(duì)一聊天和公告的示例代碼
這篇文章主要介紹了Springboot+WebSocket實(shí)現(xiàn)一對(duì)一聊天和公告的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
解決Java?properties文件里面如何寫(xiě)"\"的問(wèn)題
由于properties使用“\”相當(dāng)于是java的轉(zhuǎn)義符,如果想要寫(xiě)出\的效果,只需修改相應(yīng)的寫(xiě)法即可,對(duì)java?properties文件里的"\"寫(xiě)法感興趣的朋友一起看看吧2022-04-04
Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)項(xiàng)目之在線服裝銷售商城系統(tǒng)的實(shí)現(xiàn)流程
基礎(chǔ)掌握怎么樣,用實(shí)戰(zhàn)檢驗(yàn)就知道了,本篇文章手把手帶你用java+SpringBoot+Maven+Vue+mysql實(shí)現(xiàn)一個(gè)在線服裝銷售商城系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2022-01-01
詳解如何在Spring Boot項(xiàng)目使用參數(shù)校驗(yàn)
本篇文章主要介紹了如何在Spring Boot項(xiàng)目使用參數(shù)校驗(yàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
SpringBoot整合Guava Cache實(shí)現(xiàn)全局緩存的示例代碼
這篇文章主要介紹了SpringBoot整合Guava Cache實(shí)現(xiàn)全局緩存,Guava Cache是Google Guava庫(kù)中的一個(gè)模塊,提供了基于內(nèi)存的本地緩存實(shí)現(xiàn),文中介紹了SpringBoot整合使用Guava Cache的具體步驟,需要的朋友可以參考下2024-03-03
Mybatis讀取和存儲(chǔ)json類型數(shù)據(jù)的實(shí)現(xiàn)
本文主要介紹了Mybatis讀取和存儲(chǔ)json類型數(shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
深入解析Java編程中面向字節(jié)流的一些應(yīng)用
這篇文章主要介紹了Java編程中面向字節(jié)流的一些應(yīng)用,是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-10-10
淺析Java 數(shù)據(jù)結(jié)構(gòu)常用接口與類
本篇文章主要介紹了Java中的數(shù)據(jù)結(jié)構(gòu),Java工具包提供了強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)。需要的朋友可以參考下2017-04-04
在springboot中攔截器Filter中注入bean失敗問(wèn)題及解決
這篇文章主要介紹了在springboot中攔截器Filter中注入bean失敗問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05

