网易网考题“9和g”

一个字符串中9和g模糊,如果同等对待,输出所有可能性

public class Solution {
	
	public static String toFullBinaryString(int num,int size) {
	      char[] chs = new char[size];
	      for(int i = 0; i < size; i++) {
	           chs[size - 1 - i] = (char)(((num >> i) & 1) + '0');
	       }
	       return new String(chs);        
	}
	
	public ArrayList<String> getPossibleList(String input){
		input = input.replace("9", "g");
		ArrayList<String> result = new ArrayList<String>();
		ArrayList<Integer> flag = new ArrayList<Integer>();
		int j = 0;
		for(int i=0;i<input.length();i++){
			if(input.charAt(i) == 'g'){
				flag.add(i);
			}
		}

		int count = flag.size();
		for(int i=0;i<Math.pow(2, count);i++){
			String binary = toFullBinaryString(i,count);
			StringBuilder tmp = new StringBuilder(input);
			for(int k=0;k<binary.length();k++){
				if(binary.charAt(k) == '1'){
					tmp.deleteCharAt(flag.get(k).intValue());
					tmp.insert(flag.get(k).intValue(),"9");
				}
				else
					continue;
			}
			result.add(tmp.toString());
		}
		return result;
	}
	
	public static void main(String[] args){
		String input = "123g97g";
		Solution sl = new Solution();
		ArrayList<String> result = sl.getPossibleList(input);
		for(String output : result){
			System.out.println(output);
		}
		System.out.println("Total : " + result.size());
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值