力扣1689. 十-二進位數的最少數目-C語言實現-中等難度題
題目
如果一個十進位數字不含任何前導零,且每一位上的數字不是 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 不含任何前導零並總是表示正整數
來源:力扣(LeetCode)
解題
模板
int minPartitions(char * n){
}
解題思路
其實這題可以理解為求取輸入的字元串里最大的數是多少,最大不過就是9,所以可以建立遍歷向後的循環
我們可以通過判斷循環內的元素是否還有來決定是否終止循環遍歷,每次遍歷得到需要將字元轉化為數字就是n[i]-‘0’;
如果提前檢測到了9就可以直接跳出了,以為不會有比9更大的了,省去無用的功夫。
程式碼
int minPartitions(char * n){
int times=0;
for(int i=0;n[i]!='\0';i++)
{
times=fmax(times,n[i]-'0');
if(times==9)return times;
}
return times;
}