求助求助,拼多多笔试题目

#拼多多##笔试题目#
全部评论
import java.util.ArrayList; import java.util.List; import java.util.Scanner; /**  * @file: 扑克游戏  * @author: Ash  * @date: 2019/9/1 15:15  * @description:  * 3  * 123  * 3  * 123  * 321  * 45  * 67  *  * {  * d d l  * d d r  * }  * {  * l l l  * r l l  * }  * {  * }  * @since:  */ public class 扑克游戏 {     public static void main(String[] args) {         Scanner in = new Scanner(System.in);         while (in.hasNext()) {             int s = Integer.parseInt(in.nextLine());             for (int i = 0; i < s; i++) {                 String str1 = in.nextLine();                 String str2 = in.nextLine();                 int n = str1.length();                 System.out.println("{");                 List<String> res = new ArrayList<>();                 dfs("", str2, str1, 0, n, "", res);                 for (String st : res) {                     System.out.println(st.trim());                 }                 System.out.println("}");             }         }         in.close();     }     private static void dfs(String cmd, String goal, String ori, int depth, int n, String s, List<String> res) {         if (depth == n && !goal.equals(s) || depth > n || s.length() > goal.length()) {             return;         }         if (depth == n && goal.equals(s)) {             res.add(cmd);         } else {             // d             dfs(cmd + " " + "d", goal, ori, depth + 1, n, s, res);             // l             dfs(cmd + " " + "l", goal, ori, depth + 1, n, ori.charAt(depth) + s, res);             // r             dfs(cmd + " " + "r", goal, ori, depth + 1, n, s + ori.charAt(depth), res);         }     } }
1 回复 分享
发布于 2019-09-01 17:02
原本以为dfs肯定时间不够,还想要剪枝,但一看题目已经放水了,N、M是[1, 8]。我来个python版本的AC代码。 import sys def str2list(string):     res = []     while string != '':         res.append(int(string[0]))         string = string[1:]     return res def dfs(mei, create, temp):     if create == bai and not mei:         res.append(temp)     elif not mei:         return     else:         # d         dfs(mei[1:], create, temp + ['d'])         # l         dfs(mei[1:], [mei[0]] + create, temp + ['l'])         # r         dfs(mei[1:], create + [mei[0]], temp + ['r']) data = sys.stdin.readlines() num = len(data) max_len = int(data[0].strip()) for i in range((num - 1) // 2):     res = []     flag = True     mei = str2list(data[1 + i * 2].strip())     bai = str2list(data[2 + i * 2].strip())     print('{')     for b in bai:         if b not in mei:             flag = False     if not flag:         print('}')         continue     dfs(mei, [], [])     for j in range(len(res)):         out = ''         for s in res[j]:             out += s + ' '         print(out[:-1])     print('}')
点赞 回复 分享
发布于 2019-09-01 17:05
求助大佬😂
点赞 回复 分享
发布于 2019-09-01 16:59
似乎是最短编辑距离的思路。
点赞 回复 分享
发布于 2019-09-01 17:02
我是暴力穷举解出来的
点赞 回复 分享
发布于 2019-09-01 17:06
求助为什么输出会有两行呀,不是只有小梅可以操作吗?而且丢弃最左边,意思是其他的都加入新序列?
点赞 回复 分享
发布于 2019-09-01 17:23
package company.pinduoduo; import java.util.*; public class Main02 {     public static void main(String[] args) {         Scanner sc = new Scanner(System.in);         while (sc.hasNext()){             int s = sc.nextInt(); //进行的次数             for (int  i = 1;  i<=s ; ++i) {                 String mei = sc.next();                 String bai = sc.next();                 List<String> res = new ArrayList<>();                 List<String> list = dfs(mei,bai,"",0,res                         ,"");                 Collections.sort(list);                 System.out.println("{");                 for(String ls: list){                     for (int j = 0; j <ls.length() ; j++) {                         if(j!=ls.length()-1) System.out.print(ls.charAt(j)+" ");                         else {                             System.out.print(ls.charAt(j));                         }                     }                     System.out.println();                 }                 System.out.println("}");             }         }     }     public static List<String> dfs(String mei,String bai,String newStr,                                    int i,List<String> res,String way){         if(bai.equals(newStr)){             res.add(way);             return res;         }         if(i==mei.length()) return res;         way+="d";         dfs(mei,bai,newStr,i+1,res,way);         way = way.substring(0,way.length()-1);         String tmp1 = newStr;         newStr = mei.substring(i,i+1) + newStr;         way+="l";         dfs(mei,bai,newStr,i+1,res,way);         way = way.substring(0,way.length()-1);         newStr = tmp1;         String tmp2 = newStr;         newStr = newStr + mei.substring(i,i+1);         way+="r";         dfs(mei,bai,newStr,i+1,res,way);         way = way.substring(0,way.length()-1);         newStr = tmp2;         return res;     } }
点赞 回复 分享
发布于 2019-09-01 17:33
哎,做的时候理解错了,一直以为在原牌堆交换得到新牌堆,结果是原牌堆一张张打出去放到新牌堆。。😓😓😓
点赞 回复 分享
发布于 2019-09-01 17:37

相关推荐

jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
评论
点赞
14
分享
正在热议
# 25届秋招总结 #
443331次浏览 4520人参与
# 春招别灰心,我们一人来一句鼓励 #
42187次浏览 537人参与
# 北方华创开奖 #
107468次浏览 600人参与
# 地方国企笔面经互助 #
7973次浏览 18人参与
# 同bg的你秋招战况如何? #
77166次浏览 569人参与
# 实习必须要去大厂吗? #
55811次浏览 961人参与
# 阿里云管培生offer #
120416次浏览 2220人参与
# 虾皮求职进展汇总 #
116163次浏览 886人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11683次浏览 289人参与
# 实习,投递多份简历没人回复怎么办 #
2454962次浏览 34861人参与
# 提前批简历挂麻了怎么办 #
149927次浏览 1978人参与
# 在找工作求抱抱 #
906096次浏览 9421人参与
# 如果公司给你放一天假,你会怎么度过? #
4762次浏览 55人参与
# 你投递的公司有几家约面了? #
33209次浏览 188人参与
# 投递实习岗位前的准备 #
1196037次浏览 18550人参与
# 机械人春招想让哪家公司来捞你? #
157648次浏览 2267人参与
# 双非本科求职如何逆袭 #
662384次浏览 7397人参与
# 发工资后,你做的第一件事是什么 #
12798次浏览 62人参与
# 工作中,努力重要还是选择重要? #
35906次浏览 384人参与
# 简历中的项目经历要怎么写? #
86937次浏览 1516人参与
# 参加完秋招的机械人,还参加春招吗? #
20153次浏览 240人参与
# 我的上岸简历长这样 #
452074次浏览 8089人参与
牛客网
牛客企业服务