一考试就歇菜,就第一道题a了25。感觉题都见过,下来又会写了,第二题可以参考一下这个,就是一个简单的递归就可以了,当然在使用优先队列排序的时候还要再改一下,因为字符串比较大小的时候是会考虑小数点的,可以先把字符串转成double类型之后在再进行比较。 main() { String str = "1200130"; PriorityQueue<String[]> queue = new PriorityQueue<String[]>((a,b)->{ double x1 = Double.valueOf(a[0]); double x2 = Double.valueOf(b[0]); if(x1!=x2) { return (int)(x1 - x2); } Double y1 = Double.valueOf(a[1]); Double y2 = Double.valueOf(b[1]); return (int)(y1 - y2); }); StringBuilder builder = new StringBuilder(); dfs(str,0,queue); while(!queue.isEmpty()) { String[] poll = queue.poll(); builder.append(poll[0]); builder.append(","); builder.append(poll[1]); if(queue.isEmpty()){ continue; } builder.append(","); } System.out.println(builder.toString()); } public void dfs(String str, int index,PriorityQueue<String[]> queue) { if(index==str.length()){ // 以0开头或者走到了尽头 return; } if(str.charAt(index)=='0'||(index+1<str.length()&;&;str.charAt(index+1)=='0')){ dfs(str,index+1,queue); return; } String l = str.substring(0,index+1); String r = str.substring(index+1,str.length()); List<String> left = getAllNums(l); List<String> right = getAllNums(r); for(int j = 0; j < left.size(); j++) { for(int k = 0; k < right.size(); k++) { queue.add(new String[]{left.get(j),right.get(k)}); } } dfs(str,index+1,queue); } public List<String> getAllNums(String str){ ///不以0结尾 List<String> ans = new ArrayList<>(); ans.add(str); if(str.charAt(str.length()-1)=='0'){ return ans; } for(int i = 1; i < str.length()-1; i++) { if (str.charAt(i+1)==0){ continue; } ans.add(str.substring(0,i) + "." + str.substring(i,str.length())); } return ans; }
点赞 1

相关推荐

10-22 12:03
山东大学 Java
程序员小白条:26届一般都得有实习,项目可以随便写的,如果不是开源社区的项目,随便包装,技术栈也是一样,所以本质应该找学历厂,多投投央国企和银行,技术要求稍微低一点的,或者国企控股那种,纯互联网一般都得要干活
应届生简历当中,HR最关...
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务