計算手機鎖屏介面所有手勢密碼的組合
阿新 • • 發佈:2018-12-20
最近閒來無事,在網上翻看各種面試題,無意中發現了這道題,計算所有手勢密碼的組合可能,覺得挺有意思的,簡單寫了一下,與小夥伴們分享下。
題目如下:
以下是程式碼實現
package test.gesture; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Gesture { private static int[][] gestureMatrix = new int[3][3]; static{ int x=0; for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ gestureMatrix[i][j]=++x; } } } private static List<List<Integer>> gestureCodes = new ArrayList<List<Integer>>(); private static int gesture = 0; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int num = 0; while(true){ System.out.println("請輸入手勢位數:"); num = scanner.nextInt(); if(num<2){ System.out.println("手勢位數必須不少於2位數!"); continue; }else{ break; } } getGestureCodes(num); scanner.close(); } public static void getGestureCodes(int num){ gesture = num; for(int i=0;i<gestureMatrix.length;i++){ for(int j=0;j<gestureMatrix[i].length;j++){ List<Integer> gesturCode = new ArrayList<Integer>(); getGestureCode(gesturCode, i, j); } } } public static void getGestureCode(List<Integer> gesturCode, int i, int j){ if(!gesturCode.contains(gestureMatrix[i][j])){ gesturCode.add(gestureMatrix[i][j]); if(gesturCode.size()==gesture){ System.out.println("組合:"+gesturCode); gestureCodes.add(gesturCode); return ; } }else{ return ; } /*向上*/ if(i-1>=0){ List<Integer> gesturCode1 = new ArrayList<Integer>(); gesturCode1.addAll(gesturCode); getGestureCode(gesturCode1, i-1, j); } /*向右*/ if(j+1<3){ List<Integer> gesturCode1 = new ArrayList<Integer>(); gesturCode1.addAll(gesturCode); getGestureCode(gesturCode1, i, j+1); } /*向下*/ if(i+1<3){ List<Integer> gesturCode1 = new ArrayList<Integer>(); gesturCode1.addAll(gesturCode); getGestureCode(gesturCode1, i+1, j); } /*向左*/ if(j-1>=0){ List<Integer> gesturCode1 = new ArrayList<Integer>(); gesturCode1.addAll(gesturCode); getGestureCode(gesturCode1, i, j-1); } } }
小夥伴如果有更好的方式,可以留言分享