LeetCode 842配列をフィボナッチ数列HERODINGのLeetCodeの道に分割する
S="123456579"などの数値文字列Sが与えられ、それをフィボナッチ式のシーケンス[123,456,579]に分けることができる.
形式上、フィボナッチ式シーケンスは非負の整数リストFであり、以下を満たす.
また、文字列を小さなブロックに分割する場合、このブロックが数値0自体でない限り、各ブロックの数字はゼロで始まる必要はありません.
Sから分割されたフィボナッチ式のシーケンスブロックのセットを返し、分割できない場合は[]を返します.
例1:
入力:「123456579」出力:[1234556579]
例2:
入力:11235813出力:[1,1,2,3,5,8,13]
例3:
入力:112358130出力:[]説明:このタスクは完了できません.
例4:
入力:0123出力:[]説明:各ブロックの数字はゼロで始まることができないため、「01」、「2」、「3」は有効な答えではありません.
例5:
入力:「1101111」出力:[110,1,111]解釈:出力[11,0,11,11]も同様に受け入れられる.
ヒント:
解題の構想:また熟知した遡及+枝切りの方法で、ここで直接公式の問題解を引用して解釈して、まず遍歴が終わったら、直接戻って、さもなくばindexから遍歴して、探している過程の中で、0に出会ったら直接breakして、それから絶えず前進して、進位した後にまず範囲を超えているかどうかを見て、フィボナッチの条件を満たすかどうかを見ていません.コードは以下の通りです.
形式上、フィボナッチ式シーケンスは非負の整数リストFであり、以下を満たす.
0 <= F[i] <= 2^31 - 1,( , 32 );
F.length >= 3;
0 <= i < F.length - 2, F[i] + F[i+1] = F[i+2] 。
また、文字列を小さなブロックに分割する場合、このブロックが数値0自体でない限り、各ブロックの数字はゼロで始まる必要はありません.
Sから分割されたフィボナッチ式のシーケンスブロックのセットを返し、分割できない場合は[]を返します.
例1:
入力:「123456579」出力:[1234556579]
例2:
入力:11235813出力:[1,1,2,3,5,8,13]
例3:
入力:112358130出力:[]説明:このタスクは完了できません.
例4:
入力:0123出力:[]説明:各ブロックの数字はゼロで始まることができないため、「01」、「2」、「3」は有効な答えではありません.
例5:
入力:「1101111」出力:[110,1,111]解釈:出力[11,0,11,11]も同様に受け入れられる.
ヒント:
1 <= S.length <= 200
S 。
解題の構想:また熟知した遡及+枝切りの方法で、ここで直接公式の問題解を引用して解釈して、まず遍歴が終わったら、直接戻って、さもなくばindexから遍歴して、探している過程の中で、0に出会ったら直接breakして、それから絶えず前進して、進位した後にまず範囲を超えているかどうかを見て、フィボナッチの条件を満たすかどうかを見ていません.コードは以下の通りです.
class Solution {
public:
vector<int> splitIntoFibonacci(string S) {
//
vector<int> list;
backtrack(list, S, S.length(), 0, 0, 0);
return list;
}
// +
bool backtrack(vector<int>& list, string S, int length, int index, long long sum, int prev) {
// ,
if (index == length) {
return list.size() >= 3;
}
long long curr = 0;
for (int i = index; i < length; i++) {
// 0
if (i > index && S[index] == '0') {
break;
}
//
curr = curr * 10 + S[i] - '0';
if (curr > INT_MAX) {
break;
}
if (list.size() >= 2) {
//
if (curr < sum) {
continue;
}
// ,
else if (curr > sum) {
break;
}
}
list.push_back(curr);
if (backtrack(list, S, length, i + 1, prev + curr, curr)) {
return true;
}
//
list.pop_back();
}
return false;
}
};
/* :heroding
:https://leetcode-cn.com/problems/split-array-into-fibonacci-sequence/solution/xiang-jie-guan-fang-ti-jie-by-heroding-hycb/
: (LeetCode)
。 , 。*/