556. 下一个更大元素 III

给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n。如果不存在这样的32位整数,则返回-1。

  • 示例 1:

    输入: 12

    输出: 21
  • 示例 2:

    输入: 21

    输出: -1

代码

class Solution {
public int nextGreaterElement(int n) {
int[] array = transfer(n);
/*
求出的下一个全排列可能会超出int类型的范围
这并不符合得出的答案是32位的结果
所以我将结果用long保存
如果它超出了int的表示范围
就返回-1
*/
long result = nextArray(array);
if (result > Integer.MAX_VALUE) {
return -1;
}
return (int)result;
//return nextArray(array);
} public long nextArray(int[] array) {
int length = array.length; /*
* 第一步,寻找最后一个正序
* 寻找方法 : 从后向前找
*/
int i;
for (i = length-1; i > 0 ; i--) {
if (array[i-1] < array[i]) {
break;
}
}
/*
* 如果没找到,也就是到了最后的一个
*/
if (i == 0) {
return -1;
} /*
*第二步,从后往前找一个比array[i-1]大的第一个数字.
*/
int j;
for (j = length-1; j > i; j --) {
if (array[j] > array[i-1]) {
break;
}
} /*
第三步,交换array[i-1],array[j]
*/
int temp = array[i-1];
array[i-1] = array[j];
array[j] = temp; /*
最后一步,把i-1后面(从i-2开始至length-1)的序列反序
*/
while (i < length-1) {
temp = array[i];
array[i] = array[length-1];
array[length-1] = temp; i ++;
length --;
}
/*
反序完毕即为一次排列结束
得到的序列就是下一个全排列
*/ long result = 0;
for (int index = 0; index < array.length; index++) {
result *= 10;
result += array[index];
} return result;
} private int[] transfer(int n) {
String str = Integer.toString(n);
int[] arr = new int[str.length()];
for (int i = 0; i < arr.length; i++) {
arr[i] = Integer.parseInt(String.valueOf(str.charAt(i)));
}
return arr;
}
}

556. 下一个更大元素 III的更多相关文章

  1. LeetCode 556. 下一个更大元素 III(Next Greater Element III)

    556. 下一个更大元素 III 556. Next Greater Element III 题目描述 给定一个 32 位正整数 n,你需要找到最小的 32 位整数,其与 n 中存在的位数完全相同,并 ...

  2. Java实现 LeetCode 556 下一个更大元素 III(数组的翻转)

    556. 下一个更大元素 III 给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n.如果不存在这样的32位整数,则返回-1. 示例 1: 输入: 1 ...

  3. Leetcode 556.下一个更大元素III

    下一个更大元素III 给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n.如果不存在这样的32位整数,则返回-1. 示例 1: 输入: 12 输出: ...

  4. [Swift]LeetCode556. 下一个更大元素 III | Next Greater Element III

    Given a positive 32-bit integer n, you need to find the smallest 32-bit integer which has exactly th ...

  5. LeetCode 503. 下一个更大元素 II(Next Greater Element II)

    503. 下一个更大元素 II 503. Next Greater Element II 题目描述 给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 ...

  6. LeetCode 496. 下一个更大元素 I(Next Greater Element I) 35

    496. 下一个更大元素 I 496. Next Greater Element I 题目描述 给定两个没有重复元素的数组 nums1 和 nums2,其中 nums1 是 nums2 的子集.找到  ...

  7. [Swift]LeetCode496. 下一个更大元素 I | Next Greater Element I

    You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of n ...

  8. [Swift]LeetCode503. 下一个更大元素 II | Next Greater Element II

    Given a circular array (the next element of the last element is the first element of the array), pri ...

  9. Leetcode 496. 下一个更大元素 I

    1.题目描述 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字  ...

随机推荐

  1. 云计算openstack——云计算、大数据、人工智能(16)

    一.互联网行业及云计算 在互联网时代,技术是推动社会发展的驱动,云计算则是一个包罗万象的技术栈集合,通过网络提供IAAS.PAAS.SAAS等资源,涵盖从数据中心底层的硬件设置到最上层客户的应用.给我 ...

  2. rocketmq-console修改logo,修改ip,修改port及完整编译安装图文版

    一.下载源码到本地 这里使用IDEA,作为编译工具 https://gitee.com/mrliuNumberOne/rocketmq-externals.git 导入成功后如图: 二.Maven编译 ...

  3. EAM在不同行业的应用

    EAM在不同行业的应用 EAM从出现至今,已让很多资产密集型企业受益,甚至在一些行业领域里已经是公认的.不可或缺的管理方案,比如电力行业.轨道交通行业等.但由于不同行业或者企业业务类型不同,导致了资产 ...

  4. MFC DLL中如何响应PreTranslateMessage消息

    最近项目中使用到MFC,由于工程是DLL的,在使用ToolTip时碰到非模态对话框无法显示的问题.查了一番资料,发现原因是由于:虽然MFC Regular DLL派生了CWinApp类,并有一个the ...

  5. 基于Excel参数化你的Selenium2测试-xlrd

    本篇文章转载至苦叶子:   前言 今天我们就如何使用xlrd模块来进行python selenium2 + excel自动化测试过程中的参数化进行演示说明,以解决大家在自动化测试实践过程中参数化的疑问 ...

  6. 一篇文章带你了解Java OOP思想

    Java OOP 思想深度刨析 Java面向对象编程 面向对象编程简称OOP(Object--对象.Oriendted--导向的.Programming--程序设计) 面向对象通俗来讲,就是指使用丰富 ...

  7. IDM下载度盘文件

    百度网盘是百度公司推出的一款个人云服务产品.百度网盘官方版操作简单,我们打开后就可以使用该软件来上传.下载文件等.不仅如此百度网盘软件还可以批量上传文件.支持断点传续等功能,重要的是上传的文件不会占用 ...

  8. 【音乐爬虫】Python爬虫-selenium+browsermob-proxy 解决动态网页 js渲染问题

    1.一般的python爬虫很简单,直接请求对应网址,解析返回的数据即可,但是有很多网站的数据的js动态渲染的,你直接请求是得不到对应的数据的 这时就需要其它手段来处理了. 2.以一个例子来说明,整个过 ...

  9. 部署MongoDB-4.2.7

    二进制部署很简单 创建存放软件目录下载解压 存放数据和日志及配置文件路径需要手工进行创建 mkdir -p /application/tools/ cd /application/tools/ wge ...

  10. MySQL 之 innodb 日志管理 -- 1. 基本日志文件

    1.基本日志文件分类 错误日志(error log) 慢查询日志日志(slow query log) 二进制日志(binlog) 查询日志(general log) 2.错误日志 主要包括mysql的 ...