题目链接:https://leetcode.com/problems/summary-ranges/
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"].
思路:这是让求一个数组的连续区间,作为这种需要处理字符和整数之间转换的题目很容出错,并且很难把代码写的优雅。我很努力的想把代码写得尽量简洁了,但是仍然很难称得上优雅。
我的第一个代码如下:
class Solution { public: vector<string> summaryRanges(vector<int>& nums) { vector<string> result; if(nums.size() == 0) return result; string str = ""; int index1=0, index2=0, old = nums[0]-1; for(int i = 0; i< nums.size(); i++) { stringstream ss; if(nums[i] == old + 1) index2 = i; else if(nums[i] != old +1) { ss << nums[index1]; if(index2 != index1) ss << "->" << nums[index2]; result.push_back(ss.str()); ss.clear(); ss.str(""); index1 = index2 = i; } if(i+1 == nums.size())//如果当前是最后一个 { cout << index1 << " " << index2 <<endl; ss << nums[index1]; if(index2 != index1) ss << "->" << nums[index2]; result.push_back(ss.str()); } old = nums[i]; } return result; } };
class Solution { public: vector<string> summaryRanges(vector<int>& nums) { vector<string> result; int i = 0, len = nums.size(); while(i < len) { stringstream ss; int j = 1; while(i+j < len && nums[i+j] - nums[i] == j) j++; if(j > 1)//区间长度大于1 ss << nums[i] << "->" << nums[i+j-1]; else//区间长度为1 ss << nums[i]; result.push_back(ss.str()); i += j; } return result; } };
参考:http://www.lxway.com/44098462.htm