《面试编程题真题合集(二)——招商银行2019校园招聘真题题解》
2018-03-30 13:48
513 查看
一、寻找合法字符串
此题是leetcode原题:https://leetcode.com/problems/generate-parentheses/description/
题目描述:
给出一个正整数n,请给出所有的包含n个‘(’和n个‘)’的字符串,使得’(‘he’)’可以完全匹配。
例如:
‘(())()’,’()()()’都是合法的;’())()(‘是不合法的。
请按照字典序给出所有合法的字符串
输入描述:
输入为一个正整数
输出描述:
输出为所有合法的字符串,用英文逗号隔开
示例1:
输入
2
输出
(()),()()
解题思路:
假设我们从左到右生成一个合法的括号配对字符串,在生成不同的括号配对时,要注意以下几个问题:
1、字符串最左边的括号一定是”(“,最右边的括号一定是”)”
2、在生成合法的字符串配对时,我们可以考虑这样插入新的括号:
a)如果当前左括号数left大于右括号数right,那么此时我们再插入一个”(“或”)”都是能保证合法配对的
b)如果当前左括号数left等于右括号数right,那么下一个即将插入的括号一定是”(“才能保证配对合法
c)如果当前左括号数left已经等于num,即左括号全部已生成,则只需在后面补完所有剩下的”)”就可以了
注意:左括号一定是最先全部生成的
java代码实现:
此题是leetcode原题:https://leetcode.com/problems/generate-parentheses/description/
题目描述:
给出一个正整数n,请给出所有的包含n个‘(’和n个‘)’的字符串,使得’(‘he’)’可以完全匹配。
例如:
‘(())()’,’()()()’都是合法的;’())()(‘是不合法的。
请按照字典序给出所有合法的字符串
输入描述:
输入为一个正整数
输出描述:
输出为所有合法的字符串,用英文逗号隔开
示例1:
输入
2
输出
(()),()()
解题思路:
假设我们从左到右生成一个合法的括号配对字符串,在生成不同的括号配对时,要注意以下几个问题:
1、字符串最左边的括号一定是”(“,最右边的括号一定是”)”
2、在生成合法的字符串配对时,我们可以考虑这样插入新的括号:
a)如果当前左括号数left大于右括号数right,那么此时我们再插入一个”(“或”)”都是能保证合法配对的
b)如果当前左括号数left等于右括号数right,那么下一个即将插入的括号一定是”(“才能保证配对合法
c)如果当前左括号数left已经等于num,即左括号全部已生成,则只需在后面补完所有剩下的”)”就可以了
注意:左括号一定是最先全部生成的
java代码实现:
import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main{ /** * 招商银行2019春招---寻找字合法字符串 * @param parenthese * @param num 左右括号对数 * @param left 已生成的左括号数,left<=num * @param right 已生成的 右括号数,right<=num * @return */ public static List<String> generate(String parenthese,int num,int left,int right){ List<String> result = new ArrayList<String>(); //在左括号未用完时 if(left < num){ //生成的左括号数大于右括号数,则下一个括号可以为左括号, 也可以为右括号 if(left>right){ //下一个生成左括号 result.addAll(generate2(parenthese+"(",num,left+1,right)); //下一个生成右括号 result.addAll(generate2(parenthese+")",num,left,right+1)); } else{//左括号数和右括号数相同时,一定是添加左括号 result.addAll(generate2(parenthese+"(",num,left+1,right)); } } if(left==num &&right<num){ for(int i=right+1;i<=num;i++) parenthese += ")"; right = num; result.add(parenthese); } return result; } public static void main(String[] args){ Scanner reader = new Scanner(System.in); int num = Integer.parseInt(reader.nextLine()); //输入括号的对数 List<String> result =generate2("", num, 0, 0); for(int i=0;i<result.size();i++){ if(i==result.size()-1) System.out.print(result.get(i)); else System.out.print(result.get(i)+","); } reader.close(); } }
相关文章推荐
- 《面试编程题真题合集(一)——网易2018校园招聘真题题解》
- 网易2018校园招聘编程真题之重排数列
- 网易2018校园招聘编程真题之魔法币
- 校园招聘面试总结
- 2012年华为校园招聘杭州站面试
- [置顶] 各大IT公司2012校园招聘笔试面试整理
- 华为软件校园招聘编程上机题目(1)
- 网易2018校园招聘编程题真题-[编程题] 字符串碎片
- 校园招聘(面试)
- 国内著名IT公司(百度、搜狗、网易、新浪)2012校园招聘笔试、面试小结
- 名企招聘经典面试编程题集锦[第11-20题]
- 2012联发科校园招聘成都手机软件部门笔试&第一轮面试
- 各大IT公司2012校园招聘笔试面试整理
- 百度2015校园招聘面试题目回忆录
- 笔试面试(1)腾讯2014校园招聘软件开发类笔试试题
- [转载]各大it公司2012校园招聘笔试面试整理
- 各大IT公司2012校园招聘笔试面试整理
- 【笔试or面试】3G门户校园招聘
- 网易2018校园招聘编程题真题-[编程题] 相反数
- 2017微软秋季校园招聘在线编程笔试 题目2 Composition