著名軟件公司的java筆試算法題!(含參考答案)

?

原題如下:用1、2、2、3、4、5這六個數字,用java寫一個main函數,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"與"5"不能相連.

我看了回貼都沒有很好解決,主要是沒有排除重復。

?

解決思路:強化題目,用1、2、2、3、4、5這六個數字排列“遞增”序列。其他要求不變。

算法思路:顯然是遞歸,初始序列122345,先從末兩位(45)變化(45,54),然后末三位(345) ... 直到最后六位.怎樣解決重復問題?很簡單,由于是遞增序列,每生成新序列可與前一生成序列比較,如<放棄當前序列。當然有更好效率,如預先預測。代碼如下:

class test

{

// 當前固定部分

private String CurFixPart;

private String PreGenNum;

?

public static void main(String[] args)

{

test t=new test();

t.GenControll("122345");

}

?

// 調整字符串s位置pos字符到最前

private String shift(String s, int pos)

{

String newStr;

if (s.length()>pos+1)

newStr=s.substring(pos, pos+1)

+s.substring(0, pos)

+s.substring(pos+1);

else

newStr=s.substring(pos)

+s.substring(0, pos);

return newStr;

}

?

protected int Validate(String newNum)

{

String newGenNum=CurFixPart+newNum;

if (Integer.valueOf(newGenNum)<=Integer.valueOf(PreGenNum))

return 0;

if (newGenNum.substring(2,3).equals("4") ||

(newGenNum.indexOf("35")!=-1) || (newGenNum.indexOf("53")!=-1))

return 0;

?

PreGenNum=newGenNum;

System.out.println(newGenNum);

return 0;

}

?

public void GenControll(String Base)

{

PreGenNum="0";

CurFixPart="";

GenNext(Base, 0);

}

?

void GenNext(String varPart, int curPos)

{

if (varPart.length()==2)

{

Validate(varPart);

Validate(shift(varPart, 1));

return;

}

// Next Layer

String newGen=shift(varPart, curPos);

String SavedFixPart=CurFixPart;

CurFixPart=CurFixPart+newGen.substring(0,1);

GenNext(newGen.substring(1), 0);

CurFixPart=SavedFixPart;

// 同層遞增

if (curPos==varPart.length()-1)

return;

GenNext(varPart, curPos+1);

}

}

序列122345測試通過。

有什么意見請大家多多提點。

?

我來提個思路。

?

1. 先對1,2,2,3,4,5 全排序。 把結果存到一個數組里面去。

數組的元素是一個string. 比如 122345, 522413 等等

2. 歷遍整個數組用正規表達式去判斷這個元素是不是符合規格

比如 122435

規則1 。 match=[//d][//d][//d][4]

規則2。 match=[35]|[53]

如果正規表達式匹配的結果數大于0,說明這個元素不是我們要得

當匹配的結果等于0,則把這個元素加入一個新的集合中去

3. 新的集合就是我們要得結果集

?

好處: 1不要動腦子想,思路清楚。 2對于數字,字符,都適合。 3。規則的修改快速,比如要求改為第4位不能為1, 2和3不能相鄰等, 只學要改規則就可以了。



本文轉自左正博客園博客,原文鏈接:http://www.cnblogs.com/soundcode/archive/2010/12/19/1910307.html,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280802.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280802.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280802.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

django08: 視圖與路由(舊筆記)

視圖&#xff08;Views&#xff09; https://www.cnblogs.com/liwenzhou/articles/8305104.html 1.CBV和FBV 2.?????上傳文件示例 路由 https://www.cnblogs.com/liwenzhou/p/8271147.html 1.url正則表達 2.分組命名匹配&#xff08;參數&#xff09; 3.反向解析 …

【BZOJ1042】硬幣購物(動態規劃,容斥原理)

【BZOJ1042】硬幣購物&#xff08;動態規劃&#xff0c;容斥原理&#xff09; 題面 BZOJ Description 硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西&#xff0c;去了tot次。每次帶di枚ci硬幣&#xff0c;買s i的價值的東西。請問每次有多少種付款方法。 In…

ios 啟用 證書_如何在iOS 10中啟用就寢提醒,輕柔的喚醒和睡眠跟蹤

ios 啟用 證書If you have trouble regularly getting a full night’s sleep, the new Bedtime feature in iOS 10 might just help. Set a wake up time and how many hours of sleep you need, and iOS offers bedtime reminders, more gentle alarms, and basic sleep trac…

struts OGNL表達式

OGNLContext對象有兩部分構成 一部分是ROOT&#xff1a;可以放置任何對象作為ROOT 另外一部分Context&#xff1a;必須是Map形式&#xff08;鍵值對&#xff09; OGNL表達式操作 package cn.future.a_ognl;import java.util.HashMap; import java.util.Map;import ognl.Ognl; i…

纖程(FIBER)

Indy 10 還包含對纖程的支持。纖程是什么&#xff1f;簡單來說&#xff0c;它也是 一個“線程”&#xff0c;但是它是由代碼控制的&#xff0c;而不是由操作系統控制的。實際上&#xff0c;可以認為線程 是一個高級纖程。纖程和 Unix 用戶線程(Unix user threads)很相似。 線程…

制作一個用戶頭像選擇器仿 WeGame

制作一個用戶頭像選擇器仿 WeGameCropAvatar作者&#xff1a;WPFDevelopersOrg - 驚鏵原文鏈接&#xff1a;https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用.NET40&#xff1b;Visual Studio 2019;制作一個用戶頭像選擇Canvas為父控件所實現&#xff0c;展示圖片使…

PS2019進階筆記(二)

云端網校筆記&#xff08;PS2015&#xff09; 一、圖層混合模式 圖層面板上的左上角&#xff0c;默認正常 混合下面圖層&#xff0c;下面正片&#xff08;如模特&#xff09;。 最常用是&#xff1a;不透明度 溶解&#xff1a;需調節透明度 變暗組&#xff1a; 亮區域去除…

Html5里frameSet不在使用的替代方法,使用ifram

原來得使用方式&#xff1a; <frameset rows"100,*" frameborder"0"><frame name"header" src"header.aspx"></frame><frameset cols"15%, *"><frame name"menu" src"left.aspx&…

網曝南方電網搞末位淘汰和裁員,給各下屬單位強制規定辭退率和降崗降級率!...

電網作為壟斷性國企&#xff0c;在人們心中一向是好單位的代名詞&#xff0c;但最近卻有網友曝光南方電網搞末位淘汰和裁員&#xff0c;給各單位下了辭退率和降崗降級率&#xff0c;每個單位都要開除一部分人&#xff0c;或者把一部分人崗級降下來。有南方電網員工馬上跑出來辟…

二維數組中的查找

2019獨角獸企業重金招聘Python工程師標準>>> 題目 在一個二維數組中&#xff0c;每一行中的數都按照從左到右、從上到下的遞增順序排列。要求輸入一個整數&#xff0c;判斷數組中是否存在該整數 實現代碼 function find($matrix, $rows, $columns, $key) {//TODO 參…

C# JObject轉換JSON文件相關處理

一、JObject.Parse 1.把整個json文件字符串轉化成JObject格式。 JObject jsonData JObject.Parse(jsonString); 2.逐級轉換成JObject 最低級是"Device": "Windowsr"&#xff0c;字典。 jsonData JObject.Parse(jsonData[jsonName][jsonIndex].ToStr…

通過修改然后commit的方式創建自己的鏡像

創建自己的鏡像&#xff1a;通過現有的鏡像來創建自己的鏡像。1、首先拉取一個鏡像到本地$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEubuntu 12.04 5b117edd0b76 11 months…

hdu6103[尺取法] 2017多校6

/*hdu6103[尺取法] 2017多校6*/ #include <bits/stdc.h> using namespace std; int T, m; char str[20005]; void solve() {int ans 0;int n strlen(str);for (int i 0; i < n; i) {int l 0, r 0, p1 i, p2 i 1, cost 0;while (p1 - r > 0 && p2 …

藍牙追蹤_如何使用藍牙追蹤器跟蹤您的東西

藍牙追蹤We’ve all done it: you misplace something important and you spend a lot of time (with a lot of stress) backtracking to locate it again. With Bluetooth tracking devices you can make the hunt a lot easier, less stressful, and even avoid losing the t…

遠程訪問CENTOS的MYSQL數據庫設置

遠程訪問CENTOS的MYSQL數據庫設置 mysql -u root grant all privileges on *.* to root%identified by root; 后面的root是root用戶的密碼 grant all privileges on *.* to rootlocalhostidentified by root; mysql -u root -p

ShardingCore 7.0 版本發布

NCC ShardingCore 是一款 EntityFramework Core based 高性能、輕量級、分表分庫、讀寫分離解決方案&#xff0c;具有零依賴、零學習成本、零業務代碼入侵等特點。ShardingCore 7.0 已于近期發布。從 ShardingCore 7.0 開始&#xff0c;啟用版本號第二位來對應不同的 EFCore 版…

搬運 centos7.2 apache 綁定二級目錄 訪問依然是apache頁面

<VirtualHost *:80>ServerName xx.comDocumentRoot /var/www/html/xx</VirtualHost> 轉載于:https://www.cnblogs.com/kiimi/p/8662490.html

django09: ORM以及CSRF(舊筆記)

ORM相當于程序里的數據庫操作 ORM(一) https://www.cnblogs.com/liwenzhou/p/8688919.html ORM(二) https://www.cnblogs.com/liwenzhou/p/8660826.html CSRF:防止網站請求偽造&#xff0c;即釣魚網 在Form表達添加&#xff1a;{% csrf_toker %}

vba發送郵件 簽名_如何更改“從Windows 10的郵件發送”簽名

vba發送郵件 簽名The Windows 10 Mail app is a decent email client that allows you to add other email accounts in addition to your Microsoft accounts. You’ll notice, though, that any emails you write in the Mail app have a default signature. Windows 10 Mail…

JAVA_SE基礎——24.面向對象的內存分析

黑馬程序猿入學blog ... 接著上一章的代碼&#xff1a; //車類 class Car{//事物的公共屬性使用成員變量描寫敘述。String name; //名字的屬性 String color; //顏色屬性 int wheel; //輪子數 //事物的公共行為使用函數描寫敘述。 public void run(){ System.out.println(name&…