C/C++題解LeetCode1295統(tǒng)計(jì)位數(shù)為偶數(shù)的數(shù)字
題目描述
1295. 統(tǒng)計(jì)位數(shù)為偶數(shù)的數(shù)字 - 力扣(LeetCode)
給你一個(gè)整數(shù)數(shù)組 nums
,請(qǐng)你返回其中位數(shù)為 偶數(shù) 的數(shù)字的個(gè)數(shù)。
示例 1:
輸入:nums = [12,345,2,6,7896] 輸出:2 解釋: 12 是 2 位數(shù)字(位數(shù)為偶數(shù)) 345 是 3 位數(shù)字(位數(shù)為奇數(shù)) 2 是 1 位數(shù)字(位數(shù)為奇數(shù)) 6 是 1 位數(shù)字 位數(shù)為奇數(shù)) 7896 是 4 位數(shù)字(位數(shù)為偶數(shù)) 因此只有 12 和 7896 是位數(shù)為偶數(shù)的數(shù)字
示例 2:
輸入:nums = [555,901,482,1771] 輸出:1 解釋: 只有 1771 是位數(shù)為偶數(shù)的數(shù)字。
提示:
1 <= nums.length <= 500
1 <= nums[i] <= 10^5
思路分析
題目要求是十進(jìn)制數(shù)求位數(shù),所以最先想到的思路就是依次除進(jìn)制數(shù)10取商,然后再除,獲取到做除法的次數(shù)即為位數(shù)
此處可以使用遞歸,也可以使用for循環(huán), 如果是其他進(jìn)制數(shù),只需要修改結(jié)束條件和除數(shù)
題目給的條件 1< num < 10^5, 所以最多循環(huán)五次,不用考慮性能問題導(dǎo)致時(shí)間超時(shí)
默認(rèn)位數(shù)是值1 遞歸結(jié)束條件就是 是否 < 10,遞歸體就是將當(dāng)前位和之前的位數(shù)求和.求解即可
利用to_string函數(shù)可以將整數(shù)轉(zhuǎn)換成字符串
然后用string類自帶的求長(zhǎng)度函數(shù)可以求出有幾位
然后直接對(duì)2求余就知道是奇數(shù)還是偶數(shù)了。
AC 代碼
class Solution { public: int getLengthOfNumber (int num) { int lenght = 1; if (num < 10) { return lenght; } num = num / 10; lenght = getLengthOfNumber(num) + lenght; return lenght; } int findNumbers(vector<int>& nums) { int num = 0; int length = (int)nums.size(); for (int i = 0 ; i < length; i++) { int length = getLengthOfNumber(nums[i]); if (length % 2 == 0) { num++; } } return num; } };
class Solution { public: int findNumbers(vector<int>& nums) { int count = 0; for(auto v : nums) { string x = to_string(v); if(x.size()%2 == 0) count++; } return count; } };
將int轉(zhuǎn)為String
調(diào)用.length,然后%2==0即為偶數(shù) - 統(tǒng)計(jì)位數(shù)為偶數(shù)的數(shù)字
代碼
class Solution { public int findNumbers(int[] nums) { int res=0; for(int i:nums){ if(String.valueOf(i).length()%2==0){ res++; } } ??????? return res; } }
3種方法 - 統(tǒng)計(jì)位數(shù)為偶數(shù)的數(shù)字
1. 把數(shù)字轉(zhuǎn)成字符串
public int findNumbers(int[] nums) { int count = 0; for (int i = 0; i < nums.length; i++) { if (String.valueOf(nums[i]).length() % 2 == 0) { count++; } } return count; }
2. 數(shù)字循環(huán)除10,統(tǒng)計(jì)等于0的時(shí)候除10的次數(shù),偶數(shù)次則該數(shù)為偶數(shù)位
public int findNumbers(int[] nums) { int count = 0; for (int i = 0; i < nums.length; i++) { int N = nums[i]; //記錄除10的次數(shù) int countTen = 0; while (N != 0) { N/=10; countTen++; } //如果除10的次數(shù)是偶數(shù)次,則該數(shù)為偶數(shù)位數(shù) if (countTen % 2 == 0) { count++; } } return count; }
3. 已知范圍為1 <= nums[i] <= 10^5,所以只有兩個(gè)區(qū)間內(nèi)的數(shù)為偶數(shù)位10~99以及1000~9999
public int findNumbers(int[] nums) { int count=0; for(int i=0;i<nums.length;++i){ if((nums[i]>=10&&nums[i]<100)||(nums[i]>=1000&&nums[i]<10000)) count++; } return count; }
以上就是C/C++題解LeetCode1295統(tǒng)計(jì)位數(shù)為偶數(shù)的數(shù)字的詳細(xì)內(nèi)容,更多關(guān)于C/C++統(tǒng)計(jì)位數(shù)為偶數(shù)字的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MATLAB實(shí)現(xiàn)五子棋游戲(雙人對(duì)戰(zhàn)、可悔棋)
這篇文章主要為大家詳細(xì)介紹了MATLAB實(shí)現(xiàn)五子棋游戲,可以進(jìn)行雙人對(duì)戰(zhàn)、也可悔棋,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06C++如何動(dòng)態(tài)的生成對(duì)象詳解
C++是不支持根據(jù)類名動(dòng)態(tài)地生成對(duì)象的,比如從一個(gè)文本文件中讀取類名然后構(gòu)造一個(gè)對(duì)象.主要原因是沒有豐富的動(dòng)態(tài)元信息,沒有單根類庫(kù)。那么下面這篇文章就來給大家介紹C++是如何動(dòng)態(tài)的生成對(duì)象,有需要的朋友們可以參考借鑒。2017-02-02C++利用Socket實(shí)現(xiàn)主機(jī)間的UDP/TCP通信
這篇文章主要為大家詳細(xì)介紹了C++如何利用Socket實(shí)現(xiàn)主機(jī)間的UDP/TCP通信功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-01-01C++學(xué)習(xí)之虛函數(shù)表與多態(tài)詳解
這篇文章主要為大家詳細(xì)介紹了C++中虛函數(shù)表與多態(tài)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C++有一定的幫助,感興趣的小伙伴可以了解一下2023-03-03visual studio 2013中配置opencv圖文教程 Opencv2.4.9安裝配置教程
這篇文章主要為大家詳細(xì)介紹了Opencv2.4.9安裝教程,以及在visualstudio 2013中opencv的配置步驟,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04