1. 程式人生 > >一道關於組合的問題,例如ABCD,他們有多少種組合,請你輸出來,演算法有兩種。

一道關於組合的問題,例如ABCD,他們有多少種組合,請你輸出來,演算法有兩種。

一種是用Stack的方法,我是參考網上一個牛人的演算法實現的。

另外一種,理解起來就容易好多。如:ABCD

其實就是1111(16進位制)進行-1的操作,直到變成0000為止。每次減一時,將得到的數為1的值輸出。如1111-1 = 1110,就是ABC的意思。

現在大家分別來看一下這兩種程式碼怎樣實現他們的思想吧.

第一種 :

package test;


import java.util.Stack;


public class Combination {
public static char[] array = {'A', 'B', 'C'};
private static Stack<Character> stack = new Stack<Character>();

public static void combination(int index) {
if (index > array.length-1) return;

stack.push(array[index]); 
print(stack);
combination(index + 1);
stack.pop(); 
combination(index + 1);
}

public static void print(Stack<Character> stack) {
for (Character i : stack) {
System.out.print(i + "  ");
}
System.out.println();
}


public static void main(String[] args) {
combination(0);
}
}

第二種:

package test;


public class Person {
public static void main(String[] s) {
char[] array = {'A', 'B', 'C'};
int n = array.length;
int total = (int) Math.pow(2, n);
for (int i = 1; i < total; i++) {
String result = "";
for (int j = 0; j < n; j++) {
if (((i >> j) % 2) == 1) {
result += array[j];
}
System.out.print(result);
result = "";
}
System.out.println();
}
}
}

相關推薦

一道關於組合的問題例如ABCD,他們多少組合出來演算法

一種是用Stack的方法,我是參考網上一個牛人的演算法實現的。 另外一種,理解起來就容易好多。如:ABCD 其實就是1111(16進位制)進行-1的操作,直到變成0000為止。每次減一時,將得到的數為1的值輸出。如1111-1 = 1110,就是ABC的意思。 現在大家分別

組合(從長度為n的字串中取m個字元)---java實現方法

對於這類組合問題,雖然感覺很簡單,但是用java程式碼實現起來卻不是那麼容易的。 這其中最容易用到的應該是遞迴的思想了,這種方法也比較容易理解: 方法一: 遞迴實現程式碼: /** * 可能種類在4000萬的時候時間效率為7.6s左右

controller 寫法討論一下寫法的區別:

controller 有兩種寫法,討論一下兩種寫法的區別: 寫法 1: app.controller('myCtrl', function($scope, $location) { $scope.myUrl = $location.absUrl(); }); 寫法2: app.controller('

andorid封裝自動滾動TextView沒有焦點滾動方式

為了解決使用原生自動滾動的TextView,在ListView上item不能點選,是因為獲取焦點所以不能點選,還有就是隻有一種方式的滾動。 關於ScreenUtils 點選開啟連結 主要程式碼: package com.sun.framework.CustomizeVC;

ios自動滾動UILabel跑馬燈滾動方式

主要程式碼:KJMarqueeLabel.h#import <UIKit/UIKit.h> typedef NS_ENUM(NSUInteger, KJMarqueeLabelType) { KJMarqueeLabelTypeLeft = 0,//向左

C語言訪問MCU暫存器方式可以採用!

微控制器的特殊功能暫存器SFR是SRAM地址已經確定的SRAM單元,在C語言環境下對其訪問歸納起

提交表單時用到的action跳轉的方法方法

1.<form method="post" action="__URL__/create" >  2.<form method="post" action="{:U('User/update')}" >

視訊質量演算法的介紹視訊質量技術及編碼

首先介紹SSIM是一種全參考(Full-Rerence)視訊質量評價演算法。全參考視訊影象質量評價指標,它分別從亮度、對比度、結構三方面度量視訊影象相似性。而全參考評價演算法必須同時知道原始視訊和失真視訊。也就是想計算結構相似度,就得先找到兩個視訊,一個原始的,

MySQL儲存過程中定義變數方式

MySQL儲存過程中,定義變數有兩種方式: 1.使用set或select直接賦值,變數名以 @ 開頭. 例如:set @var=1; 可以在一個會話的任何地方宣告,作用域是整個會話,稱為會話變數。

[演算法]用求質數的演算法(窮舉法篩選法)C語言實現

今天考試的題目是記不得了,等題目公開了再給大家分析,今天講點經典的演算法,求質數,相信很多人還是記得當年的窮舉法了吧,就是不斷的讓每一個數除以一個小於他的數最大到sqrt(N),然後得出結果,演算法時間複雜度O(N^2),優化過的演算法O(N * sqrt(N)),經典的演算法我就不講了,初學者如果不懂的話,

換零錢:數量不限的硬幣幣值為25分、10分、5分和1分編寫程式碼計算n分表示法

換零錢: 有數量不限的硬幣,幣值為25分、10分、5分和1分,請編寫程式碼計算n分有幾種表示法。 給定一個int n,請返回n分有幾種表示法。保證n小於等於100000,為了防止溢位,請將答案Mod 1000000007。 測試樣例 6 返回:2 動態規劃 dp[i][s

優化Oracle資料庫方式

資料庫效能最關鍵的因素在於IO,因為操作記憶體是快速的,但是讀寫磁碟是速度很慢的,優化資料庫最關鍵的問題在於減少磁碟的IO,就個人理解應該分為物理的和邏輯的優化, 物理的是指oracle產品本身的一些優化,邏輯優化是指應用程式級別的優化 物理優化的一些原則: 1). Or

Vue中顯示img圖片顯示不出來怎麼辦?方案

1、近期在學習Vue中發現了一個難點就是顯示圖片<img> 試了很多辦法都不行,有的還保錯。後來我找了很多人,以及網上找資料終於被我給找到了。 2、如何你是一個普通元件的話,那麼這樣就可以

JFinal新版sql模板Template的呼叫方式學會了嗎?

最近JBolt專案中升級到了最新版JFinal,很平滑,改了個版本號輕鬆完成。 昨天,突然想起JFinal的新版ChangeLo

都0202年了還不知道javascript繼承方式?

前言     當面試官問你:你瞭解js哪些繼承方式?es6的class繼承是如何實現的?你心中有很清晰的答案嗎?如果沒有的話,可以通過閱讀本文,幫助你更深刻地理解js的所有繼承方式。       js繼承總共分成5種,包括建構函式式繼承、原型鏈式繼承、組

今天面試問了一道說一串字符串由這幾個符號組成"<>{}[]()”,寫一個算法例如如果組成方式為“<>{[]}{}()”這種也就是XML格式那種則返回true否則返回false;

length 分享 void ges 調用 new sta image package 原創 今天面試問了一道題。說一串字符串由這幾個符號組成"<>{}[]()”,寫一個算法,例如如果組成方式為“<>{[]}{}()”這種,也就是XML格式那種則返回

[微軟]個序列a,b大小都為n,序列元素的值任意整數無序; 要求:通過交換a,b中的元素使[序列a元素的和]與[序列b元素的和]之間的差最小_利用排列組合思路解決_python版

+= 求和 ever tro 解決 turn 運行 main lis (原題出自微軟公司面試題)問題如下:有兩個序列a,b,大小都為n,序列元素的值任意整數,無序;要求:通過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。例如:a=[100,99,

遞歸函數、二分查找、面相對象初識、類空間對象空間、組合、繼承

二分查找 tar %s anim style nim index 訪問類 AI 一、遞歸函數 一般遞歸100多次,都沒有解決的問題,放棄遞歸。 默認遞歸深度:998 修改默認遞歸次數 import sys sys.setrecursionlimit(100000)

Kenetic力抗加密貨幣市場趨勢年初至今的投資組合回報率高達77%

Kenetic與Venture Smart Asia Limited建立戰略合作伙伴關係,為專業投資者提供接觸加密貨幣投資基金的渠道   香港--(美國商業資訊)--總部位於香港的區塊鏈投資和諮詢公司Kenetic宣佈,儘管加密貨幣市場出現了重大損失,但截至2018年10月31