標籤:
Given a sorted integer array without duplicates, return the summary of its ranges.
For example, given [0,1,2,4,5,7], return ["0->2","4->5","7"].
解法:(1)初始化兩個遊標ind1=0,ind2=1,一個左邊界left=ind1;(2)若nums[ind2]-nums[ind1]==1則ind1++、ind2++,否則可以得到一個範圍[nums[left], nums[ind2-1]],將其存入結果中,同時更新遊標ind1=ind2,且ind2++,更新左邊界left=ind1;(3)若ind2<nums.size(),則跳轉到(2),否則處理最後剩下的一個範圍。
class Solution2 {public: vector<string> summaryRanges(vector<int>& nums) { int n = nums.size(); if (n == 0) return vector<string>(); if (n == 1) return vector<string>(1, intToString(nums[0])); int ind1 = 0; int ind2 = 1; int left = ind1; vector<string> res; while (ind1 < n && ind2 < n) { if (nums[ind2] == nums[ind1] + 1) { ind2++; ind1++; } else { string rs = ""; rs += intToString(nums[left]); if (ind2 - 1 != left) rs += "->" + intToString(nums[ind2 - 1]); left = ind1 = ind2++; res.push_back(rs); } } string rs = ""; rs += intToString(nums[left]); if (--ind2 != left) rs += "->" + intToString(nums[ind2]); res.push_back(rs); return res; }private: string intToString(const int& i) { stringstream ss; ss << i; string s = ss.str(); return s; }};
注意:(1)考慮nums.size()為0或者1的情況;(2)整數轉換為string的處理,考慮負數、最小的整數和最大的整數這些極端情況。可以使用to_string()。
[LeetCode]8. Summary Ranges統計範圍