最新穷举搜索的例子:Google方程式(Java题解),富士康java面试题整理

一线互联网大厂Java核心面试题库

image

正逢面试跳槽季,给大家整理了大厂问到的一些面试真题,由于文章长度限制,只给大家展示了部分题目,更多Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等已整理上传,感兴趣的朋友可以看看支持一波!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

思路

据说这是Google公司的面试题,我没有考证过,不过这种字符方程(或字符等式)问题有很多变种,比如2005年的Google中国编程挑战赛第二轮淘汰赛有一道名为“SecretSum”的500分的竞赛题,与本题如出一辙,只不过字母是3个,而且用的是加法计算。这个问题其实并不难,你可以将其列成竖式减法的形态,然后人工推算出来,不过接下来我们要使用穷举法来求解这个问题。

从穷举法的角度看,这是一个典型的排列组合问题,题目中一种出现了9个字母,每个字母都可能是0~9之间的数字,穷举的方法就是对每个字母用0~9的数字尝试10次,如果某一次得到的字母和数字的对应关系能够满足减法等式,则输出这一组对应关系。根据题目意思,每个字母代表一个数字,也就是说,如果W代表1,则其他8个字母就不可能是1。很显然,这是个组合问题,如果不考虑0开头数字的情况,这样的组合应该有10×9×8×7×6×5×4×3×2=3628800种组合,在这样的数量级上使用穷举法,计算机处理起来应该没有压力。

现在考虑给出一种解决这种字符方程问题的通用解法。从数据结构定义上,首先要避免使用固定9个字符的方法,这就需要定义一个可变化的字符元素列表,每个字符元素包含3个属性,分别是字母本身、字母代表的数字以及是否是数字的最高位。

题解

public class Main {

public static void main(String[] args) {

f();

}

public static void f() {

int a1 = 10; int a2 = 100; int a3 = 1000; int a4 = 10000; int a5 = 100000;

for(int W=0;W<10;W++) {

for(int D=0;D<10;D++) {

for(int O=0;O<10;O++) {

for(int T=0;T<10;T++) {

for(int G=0;G<10;G++) {

for(int L=0;L<10;L++) {

for(int E=0;E<10;E++) {

for(int C=0;C<10;C++) {

for(int M=0;M<10;M++) {

int WWWDOT = Wa5+Wa4+Wa3+Da2+O*a1+T;

int GOOGLE = Ga5+Oa4+Oa3+Ga2+L*a1+E;

int DOTCOM = Da5+Oa4+Ta3+Ca2+O*a1+M;

if(W!=D && W!=O && W!=T && W!=G && W!=L && W!=E && W!=C && W!=M) {

if(D!=O && D!=T && D!=G && D!=L && D!=E && D!=C && D!=M) {

if(O!=T && O!=G && O!=L && O!=E && O!=C && O!=M) {

if(T!=G && T!=L && T!=E && T!=C && T!=M) {

if(G!=L && G!=E && G!=C && G!=M) {

if(L!=E && L!=C && L!=M) {

if(E!=C && E!=M) {

if(C!=M) {

笔者福利

以下是小编自己针对马上即将到来的金九银十准备的一套“面试宝典”,不管是技术还是HR的问题都有针对性的回答。

有了这个,面试踩雷?不存在的!

回馈粉丝,诚意满满!!!




本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

6a57acb)收录**

需要这份系统化的资料的朋友,可以点击这里获取

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值