56. 两数之和

提示

        LintCode中的相关算法题实现代码,可以在我的GitHub中下载。

题目需求

描述

给一个整数数组,找到两个数使得他们的和等于一个给定的数 target

你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0 到 n-1

样例

给出 numbers = [2, 7, 11, 15], target = 9, 返回 [0, 1].

挑战

Either of the following solutions are acceptable:

  • O(n) Space, O(nlogn) Time
  • O(n) Space, O(n) Time

解题思路

    可以使用Hash的方式,将元素和下标保存下来,其中key是元素,下标i是value,然后再次扫描,就可以计算出结果了。

实现代码

public class Solution {
    /**
     * @param numbers: An array of Integer
     * @param target: target = numbers[index1] + numbers[index2]
     * @return: [index1 + 1, index2 + 1] (index1 < index2)
     */
    public int[] twoSum(int[] numbers, int target) {
        // write your code here
        //解题思路是hash一下
        HashMap<Integer,Integer> maps=new HashMap<Integer,Integer>();
        for(int i=0;i<numbers.length;i++)
        {
        	maps.put(numbers[i],i);
        }
        int tmp=0;
        int result[]=new int[2];
        for(int i=0;i<numbers.length;i++)
        {
        	tmp=target-numbers[i];
        	if(maps.get(tmp)!=null)
        	{
        		result[0]=i;
        		result[1]=maps.get(tmp);
        		return result;
        	}
        }
        return result;
    }
}

<think>好的,我现在需要帮用户解决使用正则表达式限制输入框只能输入点的问题。用户之前在Vue3中遇到了el-dialog下拉框未正确展示的问题,现在转向另一个问题,关于输入验证的正则表达式。首先,我需要回顾用户提供的引用内容。引用[1]到[5]中提到了多种正则表达式的应用,比如限制小写字母、字、下划线,处理字、小减号,以及限制小点后位等。用户现在明确想找的是允许点的正则表达式,可能还需要考虑小点只能出现一次,不能出现在开头或结尾,以及负号的情况。 用户的问题可能包括:1.如何编写正则表达式,确保输入只能是点? 2.如何处理多个小点的情况,比如只允许一个? 3.是否需要允许负(即包含减号)?4.如何在前端时验证,比如在Vue中使用@input事件?根据引用中的例子,例如引用[2]提到允许字、小减号,引用[4]处理小点后位。用户可能不需要减号,所以需要调整正则表达式。例如,使用^[0-9]*\.?[0-9]*$来匹配单个小点,但需要确保小点不能出现在开头或结尾,或者允许如.5这样的形式,这取决于需求。另外,用户可能在Vue项目中现,参考引用[3][5],可以使用@input事件配合正则替换。例如,在输入时替换非法字符,确保输入符合要求。同时,需要注意处理粘贴操作,可能需要添加@paste事件处理。 还需要考虑用户体验,比如当用户输入多个小点时,自动替换为一个。或者在输入非法字符时,即时反馈。例如,使用replace方法将非点的字符替换为空。 可能的问题点:-正则表达式是否正确处理所有情况,如开头的小点、多个小点。-如何绑定到Vue的输入框,确保响应式更新。 -是否需要允许负号,用户的问题中没有提到,可能需要确认,但根据问题描述,可能不需要。 接下来,整理解决方案,分步骤说明,给出正则表达式示例,并附上Vue的现代码。同时,生成相关问题,帮助用户深入理解。</think>### 使用正则表达式限制输入框仅允许点的方法 --- #### 一、基础正则表达式现 ##### 1. **核心正则表达式** ```javascript /^[0-9]*\.?[0-9]*$/ // 允许点,但需优化 ``` - **允许内容**:字(`0-9`)、小点(`.`) - **问题**:允许连续多个小点(如`12.34.56`),需进一步约束 ##### 2. **优化版本(推荐)** ```javascript /^\d*\.?\d*$/.test(value) // 允许最多一个点 ``` - 使用`\d`简化字匹配 - 通过`\.?`限制小点最多出现一次 --- #### 二、完整输入控制方案 ##### 1. **时过滤非法字符** 在输入时通过`@input`事件处理非法输入: ```vue <template> <input type="text" :value="inputValue" @input="handleInput" @paste="handlePaste" > </template> <script setup> const inputValue = ref(''); const handleInput = (e) => { // 过滤非点 const filteredValue = e.target.value .replace(/[^\d.]/g, '') // 删除非法字符 .replace(/(\..*)\./g, '$1'); // 禁止多个小点 inputValue.value = filteredValue; }; const handlePaste = (e) => { e.preventDefault(); // 阻止默认粘贴行为 const pasteText = e.clipboardData.getData('text'); const sanitized = pasteText.replace(/[^\d.]/g, ''); inputValue.value = sanitized; }; </script> ``` ##### 2. **进阶验证规则** | 需求场景 | 正则表达式 | 说明 | |-------------------------|-------------------------------------|--------------------------------------| | 允许负 | `/^-?\d*\.?\d*$/` | 开头允许负号[^2] | | 禁止小点开头/结尾 | `/^(?!\.$)\d+\.?\d*$/` | 如`.5`或`5.`被禁止 | | 限制小点后最多位 | `/^\d+(\.\d{0,2})?$/` | 如`3.14`允许,`3.141`被截断[^4] | --- #### 三、典型应用场景 ##### 1. **金额输入框(允许位小)** ```javascript value.replace(/[^\d.]/g, '') .replace(/^\./g, '') // 禁止以小点开头 .replace(/\.{2,}/g, '.') // 多个小点保留一个 .replace(/(\..*)\./g, '$1') .replace(/(\.\d{2})\d+/, '$1'); // 限制位小 ``` ##### 2. **科学计法输入** ```javascript /^-?\d*\.?\d+([eE][-+]?\d+)?$/.test(value) // 允许如`1.23e5` ``` --- #### 四、调试建议 1. **正则测试工具验证** 使用[RegExr](https://regexr.com/)在线工具测试正则表达式: ```javascript /^-?\d+\.?\d*$/.test("123.45") // 返回 true ``` 2. **边界值测试** ```javascript // 测试用例 ["123", "-456", "78.90", ".123", "12.34.56"].forEach(str => { console.log(`${str}: ${/^-?\d+\.?\d*$/.test(str)}`); }); // 输出: true, true, true, false, false ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值