C/C++題解LeetCode1295統(tǒng)計位數(shù)為偶數(shù)的數(shù)字
題目描述
1295. 統(tǒng)計位數(shù)為偶數(shù)的數(shù)字 - 力扣(LeetCode)
給你一個整數(shù)數(shù)組 nums,請你返回其中位數(shù)為 偶數(shù) 的數(shù)字的個數(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
思路分析
題目要求是十進制數(shù)求位數(shù),所以最先想到的思路就是依次除進制數(shù)10取商,然后再除,獲取到做除法的次數(shù)即為位數(shù)
此處可以使用遞歸,也可以使用for循環(huán), 如果是其他進制數(shù),只需要修改結(jié)束條件和除數(shù)
題目給的條件 1< num < 10^5, 所以最多循環(huán)五次,不用考慮性能問題導致時間超時
默認位數(shù)是值1 遞歸結(jié)束條件就是 是否 < 10,遞歸體就是將當前位和之前的位數(shù)求和.求解即可
利用to_string函數(shù)可以將整數(shù)轉(zhuǎn)換成字符串
然后用string類自帶的求長度函數(shù)可以求出有幾位
然后直接對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)計位數(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)計位數(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)計等于0的時候除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,所以只有兩個區(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)計位數(shù)為偶數(shù)的數(shù)字的詳細內(nèi)容,更多關(guān)于C/C++統(tǒng)計位數(shù)為偶數(shù)字的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
與ASCII碼相關(guān)的C語言字符串操作函數(shù)
這篇文章主要介紹了與ASCII碼相關(guān)的C語言字符串操作函數(shù),分別是將字符轉(zhuǎn)換為ASCII碼的toascii()函數(shù)和根據(jù)ASCII碼進行字符串比較的strcoll()函數(shù),需要的朋友可以參考下2015-08-08
Qt創(chuàng)建SQlite數(shù)據(jù)庫的示例代碼
本文主要介紹了Qt創(chuàng)建SQlite數(shù)據(jù)庫的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-05-05

