-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
问题
1.和为0的三元组
2.反转链表的中间某一段
3.判断一个数是不是科学计数法表示的数
求解
#include<iostream>
#include<vector>
#include <string>
#include<algorithm>
using namespace std;
class Solution {
public:
/*1.********************************************************************/
vector<vector<int>> triple(vector<int>& nums) {
int len = nums.size();
sort(nums.begin(), nums.end());
vector<vector<int>> res;
for (int i = 0; i < len - 2 && (i==0 || nums[i]!=nums[i-1]); ++i) {
int sum = -nums[i];
for (int j = i + 1, k = len - 1; j < k &&(j==i+1 || nums[j]!=nums[j-1]);) {
if (nums[j] + nums[k] == sum) {
res.push_back({ nums[i],nums[j],nums[k] });
++j;
--k;
}
else if (nums[j] + nums[k] < sum) {
++j;
}
else {
--k;
}
}
}
return res;
}
/*2.********************************************************************/
struct ListNode
{
int val;
ListNode* next;
};
ListNode* transfer(ListNode* src,int n,int m) {
ListNode res, * tail = &res;
ListNode* p = src;
ListNode mid, * mhead = &mid,*mtail = ∣
for (int cnt = 1; p;++cnt,p=p->next) {
if (cnt < n) {
tail->next = p;
tail = tail->next;
p = p->next;
}
else if (cnt <= m) {
ListNode* tmp = mhead->next;
mhead->next = p;
p = p->next;
mhead->next->next = tmp;
}
else {
break;
}
}
tail->next = mid.next;
mtail->next = p;
return res.next;
}
/*3.********************************************************************/
bool isInteger(string s) {
bool first = true;
for (int i = 0; i < s.size(); ++i) {
if (s[i] < '0' || s[i]>'9')return false;
else {
if (s[i] == '0' && first)return false;
else {
first = false;
}
}
}
return true;
}
bool isSigInteger(string s) {
if (s[0] == '+' || s[0] == '-')
return isInteger(s.substr(1));
else
return isInteger(s);
}
bool isFloatPart(string s) {
for (int i = 0; i < s.size(); ++i) {
if (s[i] < '0' || s[i]>'9')return false;
}
return true;
}
bool isbase(string s) {
int i = 0;
for (; i < s.size() && s[i] != '.'; ++i);
if (i >= s.size()) {
return isSigInteger(s);
}
else {
string s1 = s.substr(0,i);
string s2 = s.substr(i + 1);
return isSigInteger(s1) && isFloatPart(s2);
}
}
bool isScienceNum(string s) {
if (s.empty())return false;
int i = 0;
for (; i < s.size() && s[i] != 'e'; ++i);
if (i >= s.size()) {
return isbase(s);
}
else {
string s1 = s.substr(0, i);
string s2 = s.substr(i + 1);
return isbase(s1) && isSigInteger(s2);
}
}
void fun() {
string s;
while (cin >> s) {
cout << isScienceNum(s) << endl;
}
}
};
int main() {
Solution sol;
sol.fun();
return 0;
}
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels