LeetCode#228 Summary Ranges (week7)
来源:互联网 发布:葛亮家族知乎 编辑:程序博客网 时间:2024/06/14 08:04
week7
题目
Given a sorted integer array without duplicates, return the summary of its ranges.
Example 1:
Input: [0,1,2,4,5,7]
Output: [“0->2”,”4->5”,”7”]
Example 2:
Input: [0,2,3,4,6,8,9]
Output: [“0”,”2->4”,”6”,”8->9”]
原题地址:https://leetcode.com/problems/summary-ranges/description/
解析
给定一个无重复的有序数组,要求输出其范围,如果元素与后面元素不连续则单独输出,否则输出a->b,其中a表示连续元素的下界,b表示连续元素的上界。
大致思路为用两个数标定,begin标定当前比对的已有连续元素的起始位置,present标定当前正在检测的连续元素的位置,即当前找到的连续元素的最后一个,如果发现后一位连续则将present加1,继续检测下一位,否则输出begin->present,重置begin和present。
代码
class Solution {public: vector<string> summaryRanges(vector<int>& nums) { vector<string> result; int begin = 0, present = 0; while (present < nums.size()) { /*检测到达数组的最后一位,无需检测下一位*/ if (present == nums.size() - 1) { if (begin == present) { result.push_back(changeToString(nums[present])); } else { result.push_back(changeToString(nums[begin]) + "->" + changeToString(nums[present])); } break; } /*下一位与当前位连续*/ else if (nums[present + 1] == nums[present] + 1) { ++present; } /*下一位与当前位不同,且只记录到一位,则直接输出该位*/ else if (begin == present) { result.push_back(changeToString(nums[present])); ++begin; present = begin; } /*下一位与当前位不同,且有多位,输出起始位->当前位*/ else { result.push_back(changeToString(nums[begin]) + "->" + changeToString(nums[present])); begin = (++present); } } return result; } /*将int输入表示为string输出*/ string changeToString(int num) { /*int表示范围为-21474836478到2147483647 *-2147483648用int无法表示为整数2147483648 *因此单独处理 */ if (num + 2147483648 == 0) { return "-2147483648"; } int n = abs(num); vector<char> inverse; string result = ""; if (num < 0) { result += '-'; } while (n / 10 != 0) { char tmp = (n % 10) + '0'; inverse.push_back(tmp); n /= 10; } char tmp = (n % 10) + '0'; inverse.push_back(tmp); for (int i = inverse.size() - 1; i >= 0; --i) { result += inverse[i]; } return result; }};
阅读全文
0 0
- LeetCode#228 Summary Ranges (week7)
- leetcode 228: Summary Ranges
- Leetcode 228 Summary Ranges
- LeetCode 228: Summary Ranges
- Summary Ranges - LeetCode 228
- leetcode[228]:Summary Ranges
- leetcode 228:Summary Ranges
- Summary Ranges(leetcode 228)
- Leetcode #228 Summary Ranges
- leetCode #228 Summary Ranges
- leetcode 228: Summary Ranges
- [Leetcode]#228 Summary Ranges
- Leetcode 228 Summary Ranges
- [LeetCode 228] Summary Ranges
- 【LeetCode】228 Summary Ranges
- LeetCode 228 Summary Ranges
- [leetcode 228] Summary Ranges
- 【LEETCODE】228-Summary Ranges
- 正则表达式中各种字符的含义
- file compare
- ubuntu14.04 python3.5安装工具包(个人备忘)
- linux 内核自旋锁spinlock实现详解(基于ARM处理器)
- Android开发
- LeetCode#228 Summary Ranges (week7)
- STM32F10x CPU低功耗模式之停机模式
- Java JOSN数据类型处理
- linux下vim编辑器的详讲
- ubuntu上使用screenshot自定义截图教程
- TOP100summit:【分享实录】爆炸式增长的斗鱼架构平台的演进
- 双目测距--Matlab标定及深度图
- Unity3d 灯光学习
- dd命令的用法