NC324. 下一个更大的数(三)
描述
给定一个正整数 ,请找出由该正整数各个数位组成的大于其本身的最小整数,成功找到将其返回,否则返回-1 。示例1
输入:
13
输出:
31
说明:
比13大的符合要求的最小整数为31示例2
输入:
31
输出:
-1
说明:
没有比31大的符合要求的整数C++ 解法, 执行用时: 3ms, 内存消耗: 436KB, 提交时间: 2022-03-14
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return int整型 */ int nextGreaterElement(int n) { // write code here string s = to_string(n); int len = s.size(); if(len<=1) return -1; int i = len -2; while(i>=0&&s[i]>=s[i+1]) i--; if(i<0) return -1; int j = len -1; while(j>=0&&s[j]<=s[i]) j--; swap(s[i],s[j]); reverse(s.begin()+i+1,s.end()); long num = stol(s); return num>INT_MAX?-1:num; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 440KB, 提交时间: 2022-03-14
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return int整型 */ int nextGreaterElement(int n) { // write code here string strn = to_string(n); if (!std::next_permutation(strn.begin(), strn.end())) { return -1; } // printf("value:%s\n", strn.c_str()); int num = atoi(strn.c_str()); return num; } };
C++ 解法, 执行用时: 4ms, 内存消耗: 416KB, 提交时间: 2022-07-13
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return int整型 */ int nextGreaterElement(int n) { // write code here string num_str = to_string(n); int i, j, m = num_str.size(); char ch; if(m <= 1) return -1; for(i = m-2; i >= 0; i--){ if(num_str[i] < num_str[i+1]) break; } if(i < 0) return -1; sort(num_str.begin()+i+1, num_str.end()); cout <<i <<" "<<num_str<<endl; for(j = i; j < m; j++){ if(num_str[i] < num_str[j]){ ch = num_str[j]; num_str[j] = num_str[i]; num_str[i] = ch; cout <<j <<endl; break; } } cout << num_str; return stoi(num_str); } };
C++ 解法, 执行用时: 4ms, 内存消耗: 416KB, 提交时间: 2022-06-21
class Solution { public: int nextGreaterElement(int n) { string s = to_string(n); int h = s.size(); if (h <= 1) return -1; int i = h - 2; while (i >= 0 && s[i] >= s[i + 1]) i--; if (i < 0) return -1; int j = h - 1; while (j >= 0 && s[j] <= s[i]) j--; swap(s[i], s[j]); reverse(s.begin() + i + 1, s.end()); long a = stol(s); return a > INT_MAX ? -1 : a; } };
C 解法, 执行用时: 4ms, 内存消耗: 424KB, 提交时间: 2022-06-25
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return int整型 * * C语言声明定义全局变量请加上static,防止重复定义 */ int nextGreaterElement(int n) { int nums[20], numsLen = 0, v = n; while(v > 0) { nums[numsLen++] = v % 10; v = v / 10; } for (int i = 1; i < numsLen; i++) { if (nums[i] < nums[i-1]) { int left = 0, right = i-1, lastRight = i, mid; while(left <= right) { mid = (left + right) / 2; if (nums[mid] > nums[i]) { lastRight = mid; right = mid - 1; } else { left = mid + 1; } } int tmp = nums[i]; nums[i] = nums[lastRight]; nums[lastRight] = tmp; int len = i, halfLen = len / 2; for (int j = 0; j < halfLen; j++) { tmp = nums[j]; nums[j] = nums[i-1-j]; nums[i-1-j] = tmp; } len = numsLen; halfLen = len / 2; for (int j = 0; j < halfLen; j++) { tmp = nums[j]; nums[j] = nums[numsLen - 1 - j]; nums[numsLen - 1 - j] = tmp; } int sum = 0; for (int j = 0; j < numsLen; j++) { sum = sum * 10 + nums[j]; } return sum; } } return -1; }