一直以來,大量做各類管理系統的程式設計師,大量的時間都在處理各類增刪改查問題,對於其他的方面尤其是演算法層面的涉及較少,這次就遇到乙個問題。
使用者上傳乙份excel,讓使用者選擇其中的部分列頭,程式對列頭做兩兩組合,並對所有的組合取excel表中的資料,繪製乙個折線圖。
檔案上傳。前端使用非同步外掛程式提交檔案,後台使用file接受即可。公升級點在於進度條、重傳、備份等
檔案解析,基於poi、easyexcel等框架,都不難實現
選擇列頭做兩兩組合,典型的求組合問題,dfs的方式是通用實現方式。
組合獲取資料,雜湊表做key的方式,取出部分列,沒難度
繪製圖表,echarts、d3js、highcharts、g2 都沒有太大難度
抽象後的背景:針對兩兩組合,即在m列中求出所有2個的組合,可以通過雙重迴圈完成,簡單易懂。
for(int i=0;i通用做法,基於dfs演算法實現
private void dfs(int arr, int target,int begin, dequepath, set> res) else if(begin>arr.length)
for (int i = begin; i < arr.length; i++)
}
方式一快速簡單,上手快,缺點是沒有擴充套件性,一旦組合數變成3、4、5,多重迴圈顯然不合適。
方式二通用能適用各種組合數變化,只要調整target的數字即可。
這是乙個並不複雜的問題,但反映出演算法在編碼過程中的一些問題,一定要注意抽象,將個性化的業務問題抽象為技術問題,用通用的技術去解決,**的健壯性大大提高。
用DFS(廣度優先遍歷)解決組合問題
從元素集中選取幾個元素構成子集,求解可以構成子集的數目,與排列的主要區別是子集中元素順序不同視為同乙個子集 解題思路 解題時要注意進行剪枝處理,與排列問題解法的區別是對每次迭代要重新設定起始值,避免出現新增了之前的元素造成順序不同的同乙個子集被新增到答案中的情況。如果沒有重複元素,不需要用陣列對訪問...
組合問題(DFS)
給定兩個整數 n 和 k,返回 1 n 中所有可能的 k 個數的組合。輸入 n 4,k 2 輸出 2,4 3,4 2,3 1,2 1,3 1,4 1 題目要求求子集合 所以子集合中的順序沒有要求 2 注意生成子集合時 path陣列下標的確定 這裡沒有使用正常的 idx 作為下標進行確認 因為 idx...
用進製思想解決組合問題
先對我們要解決的問題進行乙個描述 如上圖所示,原來有個字串 123 現在有個對應關係,可以把1換成 a a 甲 可以把2換成 b b 可以把3換成 c 那麼,有多少種組合字串的方式呢 注意順序不變 我們可以計算得到 4 3 2 24 種組合方式 包括原字串 123 在內 我們用 0 23這24 個數...