leetCode(50):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:
    void intToString(int num, string& tmp)
    {
    	bool flag = false;
    	bool full = false;
    	if (num < 0)
    	{
    		flag = true;
    	}

    	if (num == 0)
    		tmp.push_back('0');
    	while (num!=0)
    	{
    		tmp.push_back('0' + abs(num % 10));
    		num = num / 10;
    	}
    	if (flag)
    	{//最后压入负号
    		tmp.push_back('-');
    	}
//起初是将负数转换为正数,再取余,这样就不用取绝对值了(负数取余还是负数),但有一个问题,就是补码表示的正负数区间是不对称的,如-128是没问题的,可能128就不在表示范围之内了。<strong>所以不能直接将负数转换为正数</strong>。
    	reverse(tmp.begin() , tmp.end());
    }

    vector<string> summaryRanges(vector<int>& nums) {
        vector<string> result;
    	if (nums.empty())
    		return result;
    	int tmpValue;
    	string tmp;
    	bool change = false;
    	for (int i = 0; i < nums.size(); ++i)
    	{
    		if (tmp.empty())
    		{
    			intToString(nums[i], tmp);
    			tmpValue = nums[i];
    			change = false;
    		}
    		else
    		{
    			if (tmpValue + 1 == nums[i])
    			{//连续
    				tmpValue = nums[i];
    				change = true;
    			}
    			else
    			{//不连续
    				if (change)
    				{//有连续情况出现
    					tmp.push_back('-');
    					tmp.push_back('>');
    					string tmp1;
    					intToString(tmpValue, tmp1);
    					tmp+=tmp1;
    					result.push_back(tmp);
    					tmp.clear();
    					i--;
    				}
    				else
    				{//没有连续的数
    					result.push_back(tmp);
    					tmp.clear();
    					i--;
    				}
    			}
    		}
    	}
    	if (change)
    	{//最后一个string
    		tmp.push_back('-');
    		tmp.push_back('>');
    		string tmp1;
			intToString(tmpValue, tmp1);
			tmp+=tmp1;
    		result.push_back(tmp);
    		tmp.clear();
    	}
    	else
    	{
    		result.push_back(tmp);
    		tmp.clear();

    	}

    	return result;
    }
};

网上看的别人的解法,很屌!

   class Solution {
    public:
        vector<string> summaryRanges(vector<int>& nums) {
            vector<string> res;
            nums.push_back(INT_MIN);
            long long start = nums[0], last = nums[0];
            for (int i = 1; i < nums.size(); i++) {
                if (last + 1 != (long long)nums[i]) {
                    res.push_back(to_string(start));
                    if (last != start) {
                        res[res.size() - 1] = res[res.size() - 1] + "->" + to_string(last);
                    }
                    start = nums[i];
                }
                last = nums[i];
            }
            return res;
        }
    };

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-10 19:04:59

leetCode(50):Summary Ranges的相关文章

LeetCode:Summary Ranges - 获取数组中数字的范围

1.题目名称 Summary Ranges(获取数组中数字的范围) 2.题目地址 https://leetcode.com/problems/summary-ranges/ 3.题目内容 英文:Given a sorted integer array without duplicates, return the summary of its ranges. 中文:给出一个整数数组,返回这个数组中数字的范围 例如:给出数组 [0,1,2,4,5,7],返回 ["0->2",&quo

[LeetCode]228.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"]. 代码 /*--------------------------------------- * 日期:2015-08-04 * 作者:SJF01

[LeetCode][JavaScript]Summary Ranges

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"]. https://leetcode.com/problems/summary-ranges/ 简单的模拟题,合并连续的数

Java for LeetCode 228 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"]. 解题思路: JAVA实现如下: public List<String> summaryRanges(int[] nums) { List

[LeetCode]8. 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"]. 解法:(1)初始化两个游标ind1=0,ind2=1,一个左边界left=ind1:(2)若nums[ind2]-nums[ind1]==1则ind

leetcode: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"]. Credits:Special thanks to @jianchao.li.fighter for adding this problem and

【LeetCode】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"]. 意:找出排序数组(无重复数字)中的各个连续的范围 算法思想 基本思想如下,给定排序数组 N<a1,a2,a3,...,an>,

[LeetCode] 163. Missing Ranges 缺失区间

Given a sorted integer array nums, where the range of elements are in the inclusive range [lower, upper], return its missing ranges. Example: Input: nums = [0, 1, 3, 50, 75], lower = 0 and upper = 99,Output: ["2", "4->49", "51-

leetcode_228题——Summary Ranges

Summary Ranges Total Accepted: 9278 Total Submissions: 48419My Submissions Question Solution 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&quo