一道關於組合的問題,例如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('
網友年齡 某君新認識一網友。 當問及年齡時,他的網友說: “我的年齡是個2位數,我比兒子大27歲, 如果把我的年齡的兩位數字交換位置,剛好就是我兒子的年齡” 請你計算:網友的年齡一共有多少種
#include <stdio.h> int main() { int i,j,t; for(i=10;i<100;i++) { t=i%10*10+i/10; fo
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