题目概述:
给你一个仅由数字(0 - 9)组成的字符串 num 。
请你找出能够使用 num 中数字形成的 最大回文 整数,并以字符串形式返回。该整数不含 前导零 。
注意:
你 无需 使用 num 中的所有数字,但你必须使用 至少 一个数字。
数字可以重新排序。
示例 1:
输入:num = "444947137"
输出:"7449447"
解释:
从 "444947137" 中选用数字 "4449477",可以形成回文整数 "7449447" 。
可以证明 "7449447" 是能够形成的最大回文整数。
示例 2:
输入:num = "00009" 输出:"9" 解释: 可以证明 "9" 能够形成的最大回文整数。 注意返回的整数不应含前导零。
提示:
1 <= num.length <= 105
num
由数字(0 - 9
)组成
解题思路
1. 统计各个数字出现的次数,对于数字从9到0进行遍历
如果出现次数为偶数且大于0,在字符中间末尾追加一个,并把个数减2,直到为0
如果出现次数为奇数且大于1,在字符中间末尾追加一个,并把个数减2,直到为1
2. 将已有的字符串反转
3. 从9到0找一个出现过一次的字符,如果有的话,追加到末尾
4. 在末尾追加反转后的字符串,返回结果即可代码
代码实现:
class Solution {
public int minNumberOfHours(int initialEnergy, int initialExperience, int[] energy, int[] experience) {
int n=energy.length;
int day=0;
int consume_energy=0;
for(int i=0;i<n;i++){
consume_energy+=energy[i];
}
if(consume_energy>=initialEnergy){
day=consume_energy-initialEnergy+1;
}
for(int i=0;i<n;i++){
if(initialExperience>experience[i]){
initialExperience+=experience[i];
continue;
}
day=day+experience[i]+1-initialExperience;
initialExperience=2*experience[i]+1;
}
return day;
}
}