京东笔试括号序列题 ac java版

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String line = sc.nextLine();
char[] in = line.toCharArray();
int[] right = new int[in.length / 2];
int index = 0;
int leftCount = 0;
for (int i = 0; i < in.length; i++) {
if (in[i] == '(') {
leftCount++;
}
if (in[i] == ')') {
right[index++] = leftCount;
}
}
int res = 1;
for (int i = 0; i < right.length; i++) {
res *= (right[i] - i);
}
System.out.println(res);
}
sc.close();
}
只要记录下每个右括号之前有几个左括号就行,即每个右括号在它前面的左括号取完之前一定要被取走。这就变成组合问题了
ps:求下神奇数这道题的思路,换了两种方法都没AC
全部评论
这种组合的方法怎么证明是对的呢?虽然我大概理解了这个逻辑,但是有没有普适的定理什么的?楼主怎么想到这种组合方法的?
点赞 回复 分享
发布于 2017-09-09 11:07
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.next(); char[] c = s.toCharArray(); int count = 0; int temp = 0; int all = 1; for (int i = 0; i < c.length; i++) { if (c[i] == '(') { temp++; } else { if (temp > 1) { count = temp; temp = 0; int sum = 1; for (int j = count; j > 0; j--) { sum *= j; } all *= sum; } temp = 0; } } if (all == 0) { System.out.println(1); } else { System.out.println(all); } } } 不知错哪?
点赞 回复 分享
发布于 2017-09-08 21:11
然后第二题暴力过了 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int left = sc.nextInt(); int right = sc.nextInt(); int time = 0; int[] ints = new int[10]; //避免频繁创建数组 for (int i = left; i <= right; i++) { if (isOk(ints, i)) { time++; } } System.out.println(time); } public static boolean isOk(int[] ints, int num) { int index = 0; while (num != 0) { ints[index++] = num % 10; num /= 10; } return isSumSame(0, 0, ints, 0, index); } private static boolean isSumSame(int sum1, int sum2, int[] ints, int i, int length) { if (i == length) { return sum1 == sum2; } return isSumSame(sum1, sum2 + ints[i], ints, i + 1, length) || isSumSame(sum1 + ints[i], sum2, ints, i + 1, length); } }
点赞 回复 分享
发布于 2017-09-08 21:09
//好不容易 做出来一题,第二题始终20%。回家喂牛哦 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String str = scanner.nextLine(); List<Character> list = new ArrayList<>(); for (int i = 0; i < str.length(); i++) { list.add(str.charAt(i)); } int index = 1; int result = 1; while(!list.isEmpty()){ if (list.get(index)==')'){ result *= index; list.remove(index); list.remove(index-1); index = index-1; }else{ index++; } } System.out.println(result); }
点赞 回复 分享
发布于 2017-09-08 21:07

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务