日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 306. 累加数(暴力回溯)

發布時間:2024/7/5 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 306. 累加数(暴力回溯) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

累加數是一個字符串,組成它的數字可以形成累加序列。

一個有效的累加序列必須至少包含 3 個數。除了最開始的兩個數以外,字符串中的其他數都等于它之前兩個數相加的和。

給定一個只包含數字 ‘0’-‘9’ 的字符串,編寫一個算法來判斷給定輸入是否是累加數。

說明: 累加序列里的數不會以 0 開頭,所以不會出現 1, 2, 03 或者 1, 02, 3 的情況。( 101, 000,是true)

示例 1: 輸入: "112358" 輸出: true 解釋: 累加序列為: 1, 1, 2, 3, 5, 81 + 1 = 2, 1 + 2 = 3, 2 + 3 = 5, 3 + 5 = 8示例 2: 輸入: "199100199" 輸出: true 解釋: 累加序列為: 1, 99, 100, 1991 + 99 = 100, 99 + 100 = 199進階: 你如何處理一個溢出的過大的整數輸入?

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/additive-number
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

依次枚舉所有的可能的前兩個數的組合,按照該組合向后驗證

class Solution {string sum, p, q; public:bool isAdditiveNumber(string num) {int i, j;if(num.size()<3)return false;for(i = 0; i < num.size()/2; i++) {for(j = i+1; j < num.size()-1; j++){sum = p = q = "";if(isAdd(num,i,j))return true;}}return false;}bool isAdd(string& num, int i, int j) {p = num.substr(0,i+1);//第一個數if(p.size() != 1 && p[0] == '0')//以0開頭return false;while(j < num.size()){sum = "";q = num.substr(i+1,j-i);//第二個數if(q.size() != 1 && q[0] == '0')//以0開頭return false;add(p, q);//大數加法,得到sum字符串if(j+sum.size() >= num.size() || sum != num.substr(j+1,sum.size()))return false;p = q;i = j;j += sum.size();if(j == num.size()-1)break;}return true;}void add(string& a, string& b){int i = a.size()-1, j = b.size()-1, carry = 0, bit, s;while(i >= 0 || j >= 0 || carry){s = carry+ (i>=0 ? a[i--]-'0' : 0) + (j>=0 ? b[j--]-'0' : 0);bit = s%10;carry = s/10;sum.insert(0,1,bit+'0');}} };

總結

以上是生活随笔為你收集整理的LeetCode 306. 累加数(暴力回溯)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。