插: 前些天发现了一个巨牛的人工智能学习网站,普通易懂,风趣幽默,不由得分享一下给各人。点击跳转到网站。
对峙不懈,越积极越荣幸,各人一起学习鸭~~~
标题:
给你一个非常大的整数 n 和一个整数数字 x ,大整数 n 用一个字符串体现。n 中每一位数字和数字 x 都处于闭区间 [1, 9] 中,且 n 大概体现一个 负数 。
你打算通过在 n 的十进制体现的恣意位置插入 x 来 最大化 n 的 数值 。但 不能 在负号的左边插入 x 。
例如,如果 n = 73 且 x = 6 ,那么最佳方案是将 6 插入 7 和 3 之间,使 n = 763 。
如果 n = -55 且 x = 2 ,那么最佳方案是将 2 插在第一个 5 之前,使 n = -255 。
返回插入操纵后,用字符串体现的 n 的最大值。
示例 1:
输入:n = "99", x = 9
输出:"999"
表明:不管在那里插入 9 ,结果都是雷同的。
示例 2:
输入:n = "-13", x = 2
输出:"-123"
表明:向 n 中插入 x 可以得到 -213、-123 大概 -132 ,三者中最大的是 -123 。
提示:
1 <= n.length <= 10^5
1 <= x <= 9
n 中每一位的数字都在闭区间 [1, 9] 中。
n 代表一个有效的整数。
当 n 体现负数时,将会以字符 '-' 开始。
思绪:
如果n是正数就从左向右查找,直到找到第一个小于x的数,插入进去,如果直到末了都没找到就拼接到末了。
如果n是负数就从左向右查找,直到找到第一个大于x的数,插入进去,如果直到末了都没找到就拼接到末了。
java代码:
class Solution { public String maxValue(String n, int x) { StringBuilder sb = new StringBuilder(); if (n.charAt(0) == '-') { boolean f = true; for (int i = 1; i < n.length(); i++) { char c = n.charAt(i); if (Long.parseLong(String.valueOf(c)) <= x) { sb.append(c); } else { sb.append(x); sb.append(n.substring(i)); f = false; break; } } if (f) { return sb.append(x).insert(0, '-').toString(); } return sb.insert(0, '-').toString(); } boolean f = true; for (int i = 0; i < n.length(); i++) { char c = n.charAt(i); if (Long.parseLong(String.valueOf(c)) >= x) { sb.append(c); } else { sb.append(x); sb.append(n.substring(i)); f = false; break; } } if (f) { return sb.append(x).toString(); } return sb.toString(); }} |