非常感謝你閱讀本文~
歡迎【👍點贊】【?收藏】【📝評論】~
放棄不難,但堅持一定很酷~
希望我們大家都能每天進步一點點~
本文由 二當家的白帽子 https://le-yi.blog.csdn.net/ 博客原創~
文章目錄
- 1689. 十-二進制數的最少數目:
- 樣例 1
- 樣例 2
- 樣例 3
- 提示
- 分析
- 題解
- java
- c
- c++
- python
- go
- rust
- 原題傳送門
1689. 十-二進制數的最少數目:
如果一個十進制數字不含任何前導零,且每一位上的數字不是 0 就是 1 ,那么該數字就是一個 十-二進制數 ,例如,101 和 1100 都是 十-二進制數,而 112 和 3001 不是,
給你一個表示十進制整數的字串 n ,回傳和為 n 的 十-二進制數 的最少數目,
樣例 1
輸入:
n = "32"
輸出:
3
解釋:
10 + 11 + 11 = 32
樣例 2
輸入:
n = "82734"
輸出:
8
樣例 3
輸入:
n = "27346209830709182346"
輸出:
9
提示
- 1 <= n.length <= 105
- n 僅由數字組成
- n 不含任何前導零并總是表示正整數
分析
- 這題具有欺騙性,其實根本不用考慮進位,靠進位的速度肯定不如直接就是本位增加快,
- 由于十進制數每個數位上最大是9,而十-二進制數每個數位上最大是1,如果每個數位都不考慮進位,直接靠本數位的數值相加,那十進制數這個數位是幾,就至少需要幾個十-二進制數的數位去累加,
- 所以整個十進制數最大的數位決定了至少需要幾個十-二進制數相加,
題解
java
class Solution {
public int minPartitions(String n) {
char ans = '0';
for (char c : n.toCharArray()) {
if (c > ans) {
ans = c;
}
}
return ans - '0';
}
}
c
int minPartitions(char * n){
char ans = '0';
for (; *n; ++n) {
if (*n > ans) {
ans = *n;
}
}
return ans - '0';
}
c++
class Solution {
public:
int minPartitions(string n) {
char ans = '0';
for (char c : n) {
if (c > ans) {
ans = c;
}
}
return ans - '0';
}
};
python
class Solution:
def minPartitions(self, n: str) -> int:
ans = '0'
for c in n:
if c > ans:
ans = c
return int(ans)
go
func minPartitions(n string) int {
ans := '0'
for _, c := range n {
if c > ans {
ans = c
}
}
return int(ans - '0')
}
rust
impl Solution {
pub fn min_partitions(n: String) -> i32 {
n.chars().max().unwrap().to_digit(10).unwrap() as i32
}
}
原題傳送門
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/304371.html
標籤:其他
上一篇:分支陳述句和回圈陳述句
