LeetCode算法题——返回字符串形式的结果
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了LeetCode算法题——返回字符串形式的结果,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2698字,纯文字阅读大概需要4分钟。
内容图文
![LeetCode算法题——返回字符串形式的结果](/upload/InfoBanner/zyjiaocheng/684/5d50e209cce0421d9920298572e7515e.jpg)
题目
给定一个表示分数加减运算表达式的字符串,返回一个字符串形式的计算结果。 这个结果应该是不可约分的分数,即最简分数
如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母为 1。所以在上述例子中, 2 应该被转换为 2/1。
示例 1:
输入:"-1/2+1/2"
输出: "0/1"
示例 2:
输入:"-1/2+1/2+1/3"
输出: "1/3"
示例 3:
输入:"1/3-1/2"
输出: "-1/6"
示例 4:
输入:"5/3+1/3"
输出: "2/1"
说明:
输入和输出字符串只包含 '0' 到 '9' 的数字,以及 '/', '+' 和 '-'。
输入和输出分数格式均为 ±分子/分母。如果输入的第一个分数或者输出的分数是正数,则 '+' 会被省略掉。
输入只包含合法的最简分数,每个分数的分子与分母的范围是 [1,10]。 如果分母是1,意味着这个分数实际上是一个整数。
输入的分数个数范围是 [1,10]。
最终结果的分子与分母保证是 32 位整数范围内的有效整数。
代码实现
public class demo{
//找一组数的最小公倍数
public static int find(List<Integer> list) {
int count = 0;
int min = 0;
Collections.sort(list);
int x =1;
/*for(int i:list) {
x = x*i;
}*/
for(int i=list.get(list.size()-1);i<Integer.MAX_VALUE;i++) {
for(int j:list) {
if(i%j==0) {
if((count==list.size()-1)) {
min = i;
return min;
}
count++;
}
}
count=0;
}
return 0;
}
//找两个数的最大公约数
public static String findMax(int x,int y) {
if(x==0||y==0) {
return "0/1";
}
if((x==1||x==-1)&&y==1) {
if(x==1) {
return "1/1";
}else {
return "-1/1";
}
}
int z = Math.abs(x);
int max = 0;
int min = z>y?y:z;
for(;min>=1;min--) {
if(x%min==0&&y%min==0) {
max = min;
break;
}
}
int key = x/max;
int value = y/max;
if(key==0) {
return "0/1";
}else {
String result = String.valueOf(key)+"/"+String.valueOf(value);
return result;
}
}
//拆分字符串
public static void reckon(String string) {
int min = 0;
int index1 = 0;
int index2 = 0;
List<String> list = new ArrayList<>();
for(int i=0;i<string.length();i++) {
String temp = string;
if(i!=0&&(string.charAt(i)=='+'||string.charAt(i)=='-')) {
list.add(temp.substring(index1,index2));
index1 = index2;
}
if(i==string.length()-1) {
list.add(temp.substring(index1,string.length()));
}
index2++;
}
List<Integer> keys = new ArrayList<>();
List<Integer> values = new ArrayList<>();
for(String s:list) {
String[] strings = s.split("/");
//要进行异常处理,如果大出32位有效整数,应抛出异常
keys.add(Integer.parseInt(strings[0]));
values.add(Integer.parseInt(strings[1]));
}
if(list.isEmpty()) {
System.out.println("输入字符串为空");
}else if (list.size()==1) {
System.out.println(list.get(0));
}else {
min = find(values);
if(min==0) {
System.out.println("分母最小公倍数超过了32 位整数有效整数的范围内");
}else {
for(int i=0;i<keys.size();i++) {
int temp = min/values.get(i);
keys.set(i,temp*(keys.get(i)));
}
int keysSum = 0;
for(int i=0;i<keys.size();i++) {
keysSum += keys.get(i);
}
System.out.println(findMax(keysSum,min));
}
}
}
public static void main(String[] args) {
String start = "1233555178984547512414541245/1";
reckon(start);
}
}
内容总结
以上是互联网集市为您收集整理的LeetCode算法题——返回字符串形式的结果全部内容,希望文章能够帮你解决LeetCode算法题——返回字符串形式的结果所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。